Ressourcen Datei *.RES aufbauen
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Ressourcen Datei *.RES aufbauen
Hi!
Bei Lazarus gibt es inzwischen auch den einfachen Weg für Ressourcen:
Projekteinstellungen --> Ressourcen --> Hinzufügen
Der Rest geht automatisch.
Außer ntürlich dem Laden von Ressourcen.
Winni
Bei Lazarus gibt es inzwischen auch den einfachen Weg für Ressourcen:
Projekteinstellungen --> Ressourcen --> Hinzufügen
Der Rest geht automatisch.
Außer ntürlich dem Laden von Ressourcen.
Winni
Re: Ressourcen Datei *.RES aufbauen
Es geht hier um Packages, und im Package-Editor steht dieser Weg nicht zur Verfügung.
- kupferstecher
- Beiträge: 434
- Registriert: Do 17. Nov 2016, 11:52
Re: Ressourcen Datei *.RES aufbauen
@TE: Hast du mal die .lrs-Variante probiert?
Folgendes funktioniert bei mir, habst grad auch in einer Komponente getestet.
Folgendes funktioniert bei mir, habst grad auch in einer Komponente getestet.
Code: Alles auswählen
//TPicture
fPicture.LoadFromLazarusResource('TollesBild'); //TollesBild.png
//TImage
Image1.Picture.LoadFromLazarusResource('TollesBild'); //TollesBild.png
INITIALIZATION
{$I bildle.lrs}
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Ressourcen Datei *.RES aufbauen
Hi!
lrs Ressourcen waren immer unproblematischer als res
Sie gelten allerdings seit diversen Versionen als überholt.
Funktionieren aber imer noch einwandfrei.
Winni
lrs Ressourcen waren immer unproblematischer als res
Sie gelten allerdings seit diversen Versionen als überholt.
Funktionieren aber imer noch einwandfrei.
Winni
- af0815
- Lazarusforum e. V.
- Beiträge: 6787
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Ressourcen Datei *.RES aufbauen
Als überholt oder definitiv als 'deprecated' gesetzt ? Weil solange lrs nicht definitiv abgekündigt ist, gibt es ja keinen Grund die nicht zu verwenden.Winni hat geschrieben: Mo 15. Nov 2021, 08:56 Sie gelten allerdings seit diversen Versionen als überholt.
Genaugenommen läuft ja das lrs darauf hinaus, das Daten in Quelltext verwandelt werden und dieser Quelltext dann in dem Programm eingebunden wird - wie halt bei include üblich. Deswegen kann man sich die lrs ja als Quelltest ansehen und darinnen ist nicht mal soviel 'Magic' wie manche vermuten.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Ressourcen Datei *.RES aufbauen
Hi!
Nicht deprecated.
Das Geheimnis der lrs Dateien ist einfach:
Ein bischen Overhead.
Dann die Byte-Werte als char, entweder als druckbares Zeichen oder als z.B. #157
Maximale Zeilen-Länge ist 80 - also Editor-freundlich.
Als Ganzes ist das ein String verbunden durch + Zeichen.
Fertig.
Simpel und robust.
Winni
Nicht deprecated.
Das Geheimnis der lrs Dateien ist einfach:
Ein bischen Overhead.
Dann die Byte-Werte als char, entweder als druckbares Zeichen oder als z.B. #157
Maximale Zeilen-Länge ist 80 - also Editor-freundlich.
Als Ganzes ist das ein String verbunden durch + Zeichen.
Fertig.
Simpel und robust.
Winni
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Ressourcen Datei *.RES aufbauen
Hi!
Warning: As mentioned above, using "normal"/Windows resources. Lazarus has also switched to this format since ver. 1.4
Von hier:
https://wiki.freepascal.org/Lazarus_Resources
Winni
Warning: As mentioned above, using "normal"/Windows resources. Lazarus has also switched to this format since ver. 1.4
Von hier:
https://wiki.freepascal.org/Lazarus_Resources
Winni
Re: Ressourcen Datei *.RES aufbauen
Hallo zusammen,
endlich. gez funzt datt
Ganz herzlichen Dank an euch alle.
@wp_xyz: Du warst mir wirklich eine sehr große Hilfe. Dank Deiner Info mit LCLType .... werde ich mich nun verstärkt in diesen Units umschauen.
@wennerer: Danke Dein Beispiel hat bei mir zum Erfolg geführt. Jetzt werden auch in der Methode CREATE die Icons ohne einen RAISE korrekt geladen. Was ich nicht wusste war das LAZRES nicht nur *.RES Dateien erstellt. Ja ich weiß, "wer lesen kann ist klar im Vorteil"
. Ich war derart auf *.RES fixiert, das ich den Hinweis im Lazres Dokument zu *.LRS Dateien überhaupt nicht war genommen habe.
Ihr seit echt ein tolles Team.
Nochmals ganz herzlichen Dank für eure "Senioren Betreuung"
und für euren tollen Einsatz
Lorca
endlich. gez funzt datt

Ganz herzlichen Dank an euch alle.
@wp_xyz: Du warst mir wirklich eine sehr große Hilfe. Dank Deiner Info mit LCLType .... werde ich mich nun verstärkt in diesen Units umschauen.
@wennerer: Danke Dein Beispiel hat bei mir zum Erfolg geführt. Jetzt werden auch in der Methode CREATE die Icons ohne einen RAISE korrekt geladen. Was ich nicht wusste war das LAZRES nicht nur *.RES Dateien erstellt. Ja ich weiß, "wer lesen kann ist klar im Vorteil"

Ihr seit echt ein tolles Team.
Nochmals ganz herzlichen Dank für eure "Senioren Betreuung"

Lorca
- af0815
- Lazarusforum e. V.
- Beiträge: 6787
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Ressourcen Datei *.RES aufbauen
Wenn ich mir das hier https://www.freepascal.org/docs-html/pr ... 28500013.1 ansehe, wird da dezitiert von Programm oder Bibliothek gesprochen, nicht von Komponenten. Dann wäre es logisch, warum es Probleme gibt. Steht auch im Link von Winni, nur der Link von mir ist der offizielle 'Free Pascal Programmers Guide'.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Ressourcen Datei *.RES aufbauen
Was sind das denn für Probleme mit .res-Dateien? Ich sehe hier nur den unspezifizierten Hinweis von Lorca (13.11.) wegen der Resource-nicht-gefunden Meldung. Aber das kann viele Ursachen haben. Daraus den Schluss zu ziehen, .lrs wäre vorzuziehen, erscheint mir unbegründet: Die ganze IDE arbeitet mit .res, und auch ich habe in meinen eigenen Komponenten nur (?) res-Resourcen. Ich gebe zu, dass .res umständiglicher zu handhaben sind wegen dieser blöden RT_XXXX-Klassifizierung. Aber generell sollte man mit res umgehen können, wenn man irgendwann ein Projekt/eine Komponente von Delphi portiert, oder vor allem wenn man seine Komponenten sowohl für Lazarus als auch für Delphi verfügbar machen will.
-
- Beiträge: 608
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Ressourcen Datei *.RES aufbauen
Hallo,
ich bin zwar nicht der ursprüngliche Fragesteller jedoch hat mich der Post von wp_xyz:
Beim Erzeugen einer .lrs sah meine "Bash" so aus:
und für die .res musste ich hinter den Dateinamen noch =Img1 usw. anfügen damit es geht:
Hier nun noch meine Frage an die Profis: Es scheint zwar jetzt zu funktionieren aber war das jetzt wirklich der ganze Trick oder übersehe ich da noch was?
Hier kurz der angepasste Quellcode der Mini-Komponente:
Viele Grüße
Bernd
ich bin zwar nicht der ursprüngliche Fragesteller jedoch hat mich der Post von wp_xyz:
neugierig gemacht. Ich habe deshalb meine Mini-Komponente auf .res umgestellt und hatte zunächst die gleichen Probleme wie Lorca. Nachdem ich mir aus dem Lazarus-Verzeichnis eine .res Datei geklaut hatte ging es auf einmal. Also musste mein Fehler beim Erzeugen der .res Datei passieren. Nach einigem lesen im Wiki sah ich dann einen Unterschied in der "Batch-Datei" bzw "Bash".Aber generell sollte man mit res umgehen können, ....
Beim Erzeugen einer .lrs sah meine "Bash" so aus:
Code: Alles auswählen
#!/bin/bash
lazres /home/bernd/Sprachen/Lazarus/64_bit/Meine_Komponenten/ResTest/images.lrs menu_environment_options_200.png menu_exit_200.png menu_new_search_200.png menu_project_inspector_200.png
Code: Alles auswählen
#!/bin/bash
lazres /home/bernd/Sprachen/Lazarus/64_bit/Meine_Komponenten/ResTest_res/images.res menu_environment_options_200.png=Img1 menu_exit_200.png=Img2 menu_new_search_200.png=Img3 menu_project_inspector_200.png=Img4
Hier kurz der angepasste Quellcode der Mini-Komponente:
Code: Alles auswählen
unit ResTest2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Controls, Graphics;
type
{ TResTest2 }
TResTest2 = class(TCustomControl)
private
png: array [0..3] of TPortableNetworkGraphic;
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Paint; override;
published
end;
procedure Register;
implementation
{$R images.res}
procedure Register;
begin
{$I restest2_icon.lrs}
RegisterComponents('Standard',[TResTest2]);
end;
{ TResTest2 }
constructor TResTest2.Create(AOwner: TComponent);
var lv : integer;
begin
inherited Create(AOwner);
width := 128;
height:= 32;
for lv:=0 to 3 do
png[lv] := TPortableNetworkGraphic.Create;
//.lrs
(*
png[0].LoadFromLazarusResource('menu_environment_options_200');
png[1].LoadFromLazarusResource('menu_exit_200');
png[2].LoadFromLazarusResource('menu_new_search_200');
png[3].LoadFromLazarusResource('menu_project_inspector_200');
*)
//.res
png[0].LoadFromResourceName(HINSTANCE, 'Img1');
png[1].LoadFromResourceName(HINSTANCE, 'Img2');
png[2].LoadFromResourceName(HINSTANCE, 'Img3');
png[3].LoadFromResourceName(HINSTANCE, 'Img4');
end;
destructor TResTest2.Destroy;
var lv : integer;
begin
inherited Destroy;
for lv:=0 to 3 do png[lv].Free;
end;
procedure TResTest2.Paint;
var lv : integer;
begin
inherited Paint;
canvas.FillRect(0,0,width,height);
for lv:=0 to 3 do canvas.Draw(0+(lv*32),0,png[lv]);
end;
end.
Bernd
Re: Ressourcen Datei *.RES aufbauen
Da musste ich einige Zeit suchen, denn ich konnte nicht glauben dass die Umbenennung erforderlich ist, weil bei der IDE res-Dateien auch ohne Umbenennung funktionieren, oder etwa auch im einfacher aufgebauten Industrial-Package, in dem in der Komponente TAdvLED genau dasselbe gemacht wird wie in deiner Komponente.
Das Hauptproblem war meiner Meinung nach, dass es diese Resourcen innerhalb der IDE tatsächlich schon einmal gibt. Denn du hast Bilder genommen, die unter denselben Namen in den Resourcen der IDE intern verwendet werden. Ich habe dann an die Dateinamen hinten ein "_a" angehängt, die res-Datei neu erzeugt, das Package sauber neu kompiliert und damit funktioniert dein Package auch mit res-Resourcen (sowohl bei Linux als auch Windows).
Während der Fehlersuche ist mir noch aufgefallen, dass wenn man vorher mit einer lrs-Datei gearbeitet hat und dann auf .res umstellen willst, die Gefahr besteht, dass man vergisst, das {$I datei.lrs} aus dem Quelltext zu entfernen. Bin nicht sicher, ob das auch zu einem "dupliate resource error" führt, aber jedenfalls hat man dann das Bild unnötigerweise zweimal im Package.
Weiterhin ist mir aufgefallen, dass dein weiter oben gepostetes Package die Zeile {$I images.lrs} zweimal enthält, einmal im Initialization-Abschnitt und einmal in der Register-Prozedur. Zweimal ist auf jeden Fall falsch (macht das denn keine Probleme?), und in der Register-Prozedur habe ich diese Direktiven noch nie gesehen, immer nur im Initialization-Abschnitt der Unit.
Das Hauptproblem war meiner Meinung nach, dass es diese Resourcen innerhalb der IDE tatsächlich schon einmal gibt. Denn du hast Bilder genommen, die unter denselben Namen in den Resourcen der IDE intern verwendet werden. Ich habe dann an die Dateinamen hinten ein "_a" angehängt, die res-Datei neu erzeugt, das Package sauber neu kompiliert und damit funktioniert dein Package auch mit res-Resourcen (sowohl bei Linux als auch Windows).
Während der Fehlersuche ist mir noch aufgefallen, dass wenn man vorher mit einer lrs-Datei gearbeitet hat und dann auf .res umstellen willst, die Gefahr besteht, dass man vergisst, das {$I datei.lrs} aus dem Quelltext zu entfernen. Bin nicht sicher, ob das auch zu einem "dupliate resource error" führt, aber jedenfalls hat man dann das Bild unnötigerweise zweimal im Package.
Weiterhin ist mir aufgefallen, dass dein weiter oben gepostetes Package die Zeile {$I images.lrs} zweimal enthält, einmal im Initialization-Abschnitt und einmal in der Register-Prozedur. Zweimal ist auf jeden Fall falsch (macht das denn keine Probleme?), und in der Register-Prozedur habe ich diese Direktiven noch nie gesehen, immer nur im Initialization-Abschnitt der Unit.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Ressourcen Datei *.RES aufbauen
Das macht mMn. auch keinen Sinn, weil die Registerprozedur doch nur bei der Installation des Packages verwendet wird. Der Initialization Teil der Unit aber bei jedem Laden der Unit läuft.wp_xyz hat geschrieben: Di 16. Nov 2021, 00:32 ... in der Register-Prozedur habe ich diese Direktiven noch nie gesehen, immer nur im Initialization-Abschnitt der Unit.
-
- Beiträge: 608
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Ressourcen Datei *.RES aufbauen
Hallo,
irgendwie wusste ich gleich das dies nicht die Lösung sein konnte.
@wp_xyz: jetzt wo du es mir erklärt hast wird mir das natürlich klar. Wenn ich eine Komponente mit Resource installiere wird sie ja ein Teil von Lazarus und dann darf der Name halt nicht zweimal vorkommen.
Das mit der.lrs in der Registerprocedure in meinem Post war ein Versehen. Ich hab da etliches getestet und vergessen das wieder raus zu löschen. Ich habe den Anhang im Post erneuert. Soll ja nicht
so stehen bleiben. Jedenfalls vielen Dank für deine Erklärungen und das Beispiel das du weiter oben reingestellt hast. Ich glaube jetzt komme ich klar.
@fliegermichl: Das die Registerprozedur nur bei der Installation durchläuft wusste ich auch nicht, obwohl ich auch da mit etwas nachdenken selber hätte drauf kommen können. Aber manchmal probiert man halt ohne zu denken. Auch dir ein Danke für dein Interesse!
Viele Grüße
Bernd
irgendwie wusste ich gleich das dies nicht die Lösung sein konnte.
@wp_xyz: jetzt wo du es mir erklärt hast wird mir das natürlich klar. Wenn ich eine Komponente mit Resource installiere wird sie ja ein Teil von Lazarus und dann darf der Name halt nicht zweimal vorkommen.
Das mit der.lrs in der Registerprocedure in meinem Post war ein Versehen. Ich hab da etliches getestet und vergessen das wieder raus zu löschen. Ich habe den Anhang im Post erneuert. Soll ja nicht
so stehen bleiben. Jedenfalls vielen Dank für deine Erklärungen und das Beispiel das du weiter oben reingestellt hast. Ich glaube jetzt komme ich klar.
@fliegermichl: Das die Registerprozedur nur bei der Installation durchläuft wusste ich auch nicht, obwohl ich auch da mit etwas nachdenken selber hätte drauf kommen können. Aber manchmal probiert man halt ohne zu denken. Auch dir ein Danke für dein Interesse!
Viele Grüße
Bernd