Resourcen-Text in StringList einlesen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Adrian
Beiträge: 31
Registriert: Mo 12. Nov 2007, 12:41
OS, Lazarus, FPC: Winux (L 2.0.6 FPC 3.0.4)
CPU-Target: 64Bit

Resourcen-Text in StringList einlesen

Beitrag von Adrian »

Servus!

Um einen Text, der in einer Resource gespeichert ist, zu verwenden, muß ich ihn natürlich zuerst einmal auslesen. Das kann so geschehen:

Code: Alles auswählen

 
procedure TForm1.LadeSzene;
var
  rs: TLazarusResourceStream;
  ResDa : TLResource;
begin
  Szene := 'S1';
  ResDa := LazarusResources.Find(Szene);
  if ResDa <> nil then
  begin
    rs := TLazarusResourceStream.Create(Szene, 'TXT');
    StoryMemo.Lines.LoadFromStream(rs);
    rs.Free;
  end;
end;
 


Allerdings will ich ihn nicht in einem Memo darstellen, sondern wegen der besseren Flexibilität in einer StringList ablegen. Leider funktioniert das in der nachfolgend dargestellten Weise nicht.

Code: Alles auswählen

 
procedure TForm1.LadeSzene;
var
  rs: TLazarusResourceStream;
  ResDa : TLResource;
  SzeneStringList : TStringList;
begin
  SzeneStringList := TStringList.Create;
  Szene := 'S1';
  ResDa := LazarusResources.Find(Szene);
  if ResDa <> nil then
  begin
    rs := TLazarusResourceStream.Create(Szene, 'TXT');
    SzeneStringList.LoadFromStream(rs);
    rs.Free;
  end;
end;
 


Es ist nicht so, daß das Programm an irgendeiner Stelle meckert, sondern alles wird schön ausgeführt, aber zum Schluß ist die StringList leer. Leider komme ich nicht drauf, was hier schief läuft, und frage deshalb hier, wie ich einen Resourcen-Text in eine StringList übernehmen kann.

Gruß,

Adrian

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Resourcen-Text in StringList einlesen

Beitrag von baumina »

Also normalerweise müsste das genau das gleiche sein. Bist du dir sicher, dass direkt nach LoadFromStream die StringListe leer ist?

Code: Alles auswählen

 
procedure TForm1.LadeSzene;
var
  rs: TLazarusResourceStream;
  ResDa : TLResource;
  SzeneStringList : TStringList;
begin
  SzeneStringList := TStringList.Create;
  Szene := 'S1';
  ResDa := LazarusResources.Find(Szene);
  if ResDa <> nil then
  begin
    rs := TLazarusResourceStream.Create(Szene, 'TXT');
    SzeneStringList.LoadFromStream(rs);
    If SzeneStringList.Count = 0 then showMessage('Tatsächlich leer'); // <-- ??
    rs.Free;
  end;
end;
 
.

Adrian
Beiträge: 31
Registriert: Mo 12. Nov 2007, 12:41
OS, Lazarus, FPC: Winux (L 2.0.6 FPC 3.0.4)
CPU-Target: 64Bit

Re: Resourcen-Text in StringList einlesen

Beitrag von Adrian »

Servus!

Ja, leider.
Ich habe die Anzahl der Einträge geprüft (Ergebnis = 0) und das Eingelesene extra abgespeichert, wobei die daraus resultierende Datei eine Größe von 0 Bytes aufweist.

Code: Alles auswählen

 
procedure TForm1.LadeSzene;
var
  rs: TLazarusResourceStream;
  ResDa : TLResource;
  SzeneStringList : TStringList;
begin
  SzeneStringList := TStringList.Create;
  Szene := 'S1';
  ResDa := LazarusResources.Find(Szene);
  if ResDa <> nil then
  begin
    rs := TLazarusResourceStream.Create(Szene, 'TXT');
    SzeneStringList.LoadFromStream(rs);
    ShowMessage(IntToStr(SzeneStringList.Count)+ ' Eintraege');
    SzeneStringList.SaveToFile('Szene.txt');

    rs.Free;
  end;
end;
 


Obwohl ich es eher nicht denke, daß es hilfreich ist:
Ich benutze die Version 1.0.8, FPC-Version 2.6.2 unter Win7 Professional.

Gruß,

Adrian

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: Resourcen-Text in StringList einlesen

Beitrag von theo »

Lade mal ein ganzes Testprojekt! inkl. Ressource hoch.
Da ist bestimmt was anderes nicht gut.

Adrian
Beiträge: 31
Registriert: Mo 12. Nov 2007, 12:41
OS, Lazarus, FPC: Winux (L 2.0.6 FPC 3.0.4)
CPU-Target: 64Bit

Re: Resourcen-Text in StringList einlesen

Beitrag von Adrian »

Servus!

Jetzt wirds lustig.
Als ich mein Programm zusammenstrich, um nur noch das Nötigste bereitzustellen, hat es plötzlich funktioniert.
Also ist der Programmcode eigentlich richtig.
Nun mache ich mich daran, herauszufinden, warum es in der ursprünglichen Version nicht geht.
Ich melde mich wieder!

Gruß,

Adrian

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: Resourcen-Text in StringList einlesen

Beitrag von theo »

Adrian hat geschrieben:Jetzt wirds lustig.
Als ich mein Programm zusammenstrich, um nur noch das Nötigste bereitzustellen, hat es plötzlich funktioniert.


Das hatte ich vermutet. Deshalb auch das Ausrufezeichen bei "Testprojekt!" :wink:
Das (vermeintliche?) Problem zu isolieren ist immer gut. Das kann man auch schon vor dem Aufsuchen externer Hilfe machen.

Antworten