TResourceStream

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

TResourceStream

Beitrag von Mathias »

Ich habe 2 Fragen dazu.
  • Wieso geht dies nicht unter Linux ? (Fatal: There were 1 errors compiling module, stopping)
    Wieso wird die der Inhalt des Memos beim Neustart (F9) nicht immer angepasst, wen ich vorher die "test.txt" geändert habe ?
    Ich habe "test.rc" und "test.txt" in den Projectinspector aufgenommen.

Code: Alles auswählen

uses
  Types, LResources,
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, Buttons, StdCtrls;
 
......
 
procedure TForm1.FormCreate(Sender: TObject);
var
  rs: TResourceStream;
begin
  rs := TResourceStream.Create(HINSTANCE, 'MyText', 'Text');
  Memo1.Lines.LoadFromStream(rs);
 
  rs.Free;
end; 
test.rc

Code: Alles auswählen

MyText Text "test.txt"     
test.txt

Code: Alles auswählen

bla bla
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TResourceStream

Beitrag von Socke »

Mathias hat geschrieben:Ich habe 2 Fragen dazu.
  • Wieso geht dies nicht unter Linux ? (Fatal: There were 1 errors compiling module, stopping)
    Wieso wird die der Inhalt des Memos beim Neustart (F9) nicht immer angepasst, wen ich vorher die "test.txt" geändert habe ?
    Ich habe "test.rc" und "test.txt" in den Projectinspector aufgenommen.
Kannst du den ursprünglichen Fehler mitgeben? "Fatal: There were 1 errors compiling module, stopping" ist nur die Zusammenfassung.

Die Ressourcen solltest du direkt in den Projekteinstellungen eintragen. Andernfalls musst du die .rc-Datei manuell kompilieren (z.b. über Projekteinstellungen - Compiler-Kommandos - Vorher ausführen) - diese Variante funktioniert auch mit älteren Lazarus-Versionen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TResourceStream

Beitrag von Mathias »

Kannst du den ursprünglichen Fehler mitgeben? "Fatal: There were 1 errors compiling module, stopping" ist nur die Zusammenfassung.
Ich habe genauer geguckt, es fehlt windres. Wo kann ich das finden ?
Google hat etwas von binutils geschrieben, aber wen ich "apt-get install binutils" ausführe, ist schon alles installiert.
Die Ressourcen solltest du direkt in den Projekteinstellungen eintragen.
Wen ich die Resourcen dort eintrage, kann ich dann auf die xxx.rc- Datei verzichten ?
Andernfalls musst du die .rc-Datei manuell kompilieren
Er kompiliert schon automatisch, aber leider nur, wen ich auch etwas im Pascal-Quelltext ändere, wen ich nur die Resource-Datei ändere, dann geht es nicht.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TResourceStream

Beitrag von Socke »

Mathias hat geschrieben:Ich habe genauer geguckt, es fehlt windres. Wo kann ich das finden ?
Google hat etwas von binutils geschrieben, aber wen ich "apt-get install binutils" ausführe, ist schon alles installiert.
Windres wird unter Linux in der Regel nicht verwendet; daher brauchst du die mingw32-binutils. Es muss dann aber noch ein symbolischer Link erstellt werden http://wiki.freepascal.org/Lazarus_Reso ... ve_windres.
Mathias hat geschrieben:
Die Ressourcen solltest du direkt in den Projekteinstellungen eintragen.
Wen ich die Resourcen dort eintrage, kann ich dann auf die xxx.rc- Datei verzichten?
Ja.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TResourceStream

Beitrag von Mathias »

Windres wird unter Linux in der Regel nicht verwendet; daher brauchst du die mingw32-binutils. ...
Ich habe es mit den Projekteinstellungen probiert, somit hat es auch unter Linux geklappt, und es braucht windres nicht mehr.

Ganz ohne Probleme ist es anscheinend noch nicht, folgender Code erzeugt,

Code: Alles auswählen

var
  rs: TResourceStream;
begin
  rs := TResourceStream.Create(HINSTANCE, 'test', RT_RCDATA);  
folgende Warnung:

Code: Alles auswählen

shader.pas(170,62) Warning: Symbol "RT_RCDATA" is deprecated: "Use Windows.RT_RCDATA instead"
Noch eine Frage:

Ist es möglich, die Projekteinstellungen auch, als Kompiler-schalter mitzugeben ?
Ich will die Resourcen in einer Unit verwenden, welche ich in verschieden Projekten einsetze.
Somit würde es mir erspart bleiben, bei jedem Projekt die Projekt-Einstellungen zu ergänzen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TResourceStream

Beitrag von Mathias »

Weis niemand eine Lösung, für mein obiges Problem ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TResourceStream

Beitrag von Socke »

Mathias hat geschrieben:Ist es möglich, die Projekteinstellungen auch, als Kompiler-schalter mitzugeben ?
Ich will die Resourcen in einer Unit verwenden, welche ich in verschieden Projekten einsetze.
Somit würde es mir erspart bleiben, bei jedem Projekt die Projekt-Einstellungen zu ergänzen.
Hier handelt es sich nicht um Kompilerschalter sondern um ein Feature der IDE, das unabhängig des Compilers arbeitet.

Im Bug-Tracker gab es AFAIK einen Anforderung, den Resourcen-Dialog auch auf Packages zu übertragen. Vielleicht hilft hier eine Recherche oder eine kurze Nachfrage auf der Mailing-Liste.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten