Entwickler-Ecke

Dateizugriff - TMemo-Inhalt aus Ressource laden


bf109g.01 - Do 14.04.11 08:27
Titel: TMemo-Inhalt aus Ressource laden
Hallo, ich habe in meinem Form1 ein TMemo, dessen Zeilen ich mit dem Inhalt einer TXT_Datei füllen will.
Diese TXT ist in meinem file.rc als Ressource mit eingebunden.
Ich habe jetzt folgendes versucht: TMemo.Lines.Add(LoadFromResourceName(HInstance, 'Txt_Hist')); und auch dieses versucht: TMemo.Lines.LoadFromResourceName(HInstance, 'Txt_Hist'));
Aber das funktioniert wohl nicht. Wie bekomme ich das geladen?

THX & LG


jaenicke - Do 14.04.11 08:35

user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
Aber das funktioniert wohl nicht.
Es wäre mir neu, dass LoadFromResourceName irgendwo anders als in Grafik-Klassen existiert. :nixweiss:

Wie wäre es mit TResourceStream und dann LoadFromStream bei den Lines deines Memos?


bf109g.01 - Do 14.04.11 09:10

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Ich habe die TXT datei zu den Sounds und Bildern in die Res-Datei gepackt.
Wie ich die mit deinen Hinweisen aufrufen soll, geht mir nicht auf, habe aber auch keine Ahnung davon, muss also über Try&Error basteln:
Lines.LoadfromStream(HInstance, 'Txt_Hist');:[Pascal Fehler] Spiel.pas(493): E2010 Inkompatible Typen: 'TStream' und 'Cardinal'
Lines.TResourceStream(HInstance, 'Txt_Hist');:[Pascal Fehler] Spiel.pas(493): E2003 Undefinierter Bezeichner: 'TResourceStream'

Kp, vllt setze ich da einfach nur alles falsch zusammen... :(


jaenicke - Do 14.04.11 09:42

http://lmgtfy.com/?q=TResourceStream :roll:


Narses - Do 14.04.11 09:45

Moin!

Deklariere den Text als resourcestring und "lade" ihn per Zuweisung an Memo1.Lines.Text := MyResourceString;, dann kümmert sich der Compiler darum, das richtig zu verpacken. :idea:

cu
Narses


Delete - Do 14.04.11 10:22


Quelltext
1:
ExcludeList RCDATA DISCARDABLE "exclude.lst"                    



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
function LoadTextFromResourceByName(ResourceName: ansiString): AnsiString;
var
  ResourceStream: TResourceStream;
begin
  ResourceStream := TResourceStream.Create(HInstance, ResourceName, RT_RCDATA);
  try
    try
      SetLength(Result, ResourceStream.Size);
      ResourceStream.ReadBuffer(Result[1], ResourceStream.Size);
    except
      raise;
    end;
  finally
    ResourceStream.Free;
  end;
end;

function LoadTextFromResourceByID(ResourceID: Cardinal): AnsiString;
var
  ResourceStream: TResourceStream;
begin
  ResourceStream := TResourceStream.CreateFromID(HInstance, ResourceID, RT_RCDATA);
  try
    try
      SetLength(Result, ResourceStream.Size);
      ResourceStream.ReadBuffer(Result[1], ResourceStream.Size);
    except
      raise;
    end;
  finally
    ResourceStream.Free;
  end;
end;


jaenicke - Do 14.04.11 10:55

Das try..except..raise ist doch irgendwie sinnfrei. :gruebel:


Delete - Do 14.04.11 10:55

Warum?


jaenicke - Do 14.04.11 11:17

Weil du die Exception abfängst und die gleiche dann direkt wieder wirfst. Da kommt das gleiche heraus als ob du sie erst gar nicht behandelst.


Delete - Do 14.04.11 12:02

Ach so, das meinst du. Ist eine Angewohnheit von mir, weil ich dort eventuell noch eigen Exceptions werfe.


bf109g.01 - Sa 16.04.11 12:06

Ich habe jetzt folgendes:

Datei "t.rc": Text RT_RCDATA Hist.txt
t.res ist eingebunden: {$R t.res}

Jetzt das Programm:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  RS: TResourceStream;
begin
  RS := TResourceStream.Create(HInstance,'Text', RT_RCDATA);
try
    Memo1.Lines.LoadFromStream(RS);
  finally
    RS.Free;
  end;
end;

Und der Fehler:
Zitat:
Ressource Test wurde nicht gefunden


Was läuft da bitte falsch?


jaenicke - Sa 16.04.11 12:12

In dem Ressourcenskript muss stehen:

Quelltext
1:
Text RCDATA Hist.txt                    
Das RT davor steht in Delphi einfach für Resource Type. ;-)


bummi - Sa 16.04.11 12:22

Versuchs mal damit...