Tech-Ecke / Delphi Inhalt / Resource-Datei

 

     Resource-Dateien

Mit Hilfe der Resource-Funktionalität lassen sich Dateien in der eigenen Anwendung einbinden,  auf diese dann während der Laufzeit zugegriffen werden kann.

   Resource-Datei erstellen

Zunächst benötigt man eine Resource-Datei, die all die Dateien enthält die man später nutzen möchte. In diesem Beispiel zeige ich wie man die Dateien Anwendung.exe und Text.txt in eine Resource-Datei einbindet. Zuerst kopiert man die Dateien in ein Verzeichnis. Anschließend öffnet man einen Text-Editor (Windows Editor oder vergleichbares) und Tipp folgendes hinein:

     Anwendung RCDATA Anwendung.exe 
     Text RCDATA Text.txt

Danach speichert man das ganze als Datei.rc in das Verzeichnis, in dem die Dateien der Begierde liegen. Nun öffnet man die Eingabeaufforderung (CMD), hangelt sich zum Verzeichnis vor und führt folgenden Befehl aus:

     BRC32 -r datei.rc

Voilà und schon hat man eine Resource-Datei (Datei.RES) die die beiden Dateien enthält.

Hinweis!
Beim hinzufügen von Resource-Dateien ist bei direkter Verwendung unbedingt auf den Datentyp zu achten. Die Verschiedenen Resourcetypen findet man hier. Werden die Daten über einen FileStream benutzt, so gilt für alle Dateien RCDATA als Typ.

 

   Resource-Datei in Anwendung einbinden

Dazu kopiert man die Datei.RES ins Projektverzeichnis der eigenen Anwendung und gibt unter 'implementation' die Datei wie folgt an:

  implementation

{$R Datei.res}

 

 

   Als Datei aus der Anwendung auslesen

  // Auslesen der Resource nach C:\

with TResourceStream.Create(hInstance, 'Anwendung', RT_RCDATA) do
     begin
try SaveToFile('C:\Anwendung.exe'); finally Free; end; end;

 
   // Auslesen der Resource Textdatei nach C:\

with TResourceStream.Create(hInstance, 'Text', RT_RCDATA) do
     begin
try SaveToFile('C:\Text.txt'); finally Free; end; end;

 

 

   Textdatei über FileStream aus aus Resource verwenden    (Beispiel: TListBox)

  // Auslesen der Text-Resource nach ListBox1

var
     ResDatei: TResourceStream;
...
   ResDatei := TResourceStream.Create( hInstance,
'Text',RT_RCDATA );
   ListBox1.Items.LoadFromStream(ResDatei);

 

Oder die Textdatei direkt verwenden:

  // Auslesen der Text-Resource nach ListBox1

ListBox1.Items.LoadFromStream(TResourceStream.Create(hInstance, 'Text', RT_RCDATA));

 

 

   Bild (BMP) über FileStream aus Resource verwenden    (Beispiel: TImage)

  // Auslesen der Bild-Resource nach Image1 über FileStream als RCDATA

var
     ResDatei: TResourceStream;
...
   ResDatei := TResourceStream.Create( hInstance,'Bild',RT_RCDATA );
   Image1.Picture.Bitmap.LoadFromStream(ResDatei);

// Oder direkt als BITMAP-Resource

   Image1.Picture.Bitmap.LoadFromStream

 

Oder direkt als BITMAP-Resource

  // Auslesen der Bild-Resource

  Image1.Picture.Bitmap.LoadFromResourceName(HInstance,'Bild');

 

Wichtig!
Wenn ein BMP direkt verwendet werden soll, dann muss in der rc-Datei BITMAP als Resourcentyp benutzt werden

 

   Resource Typen

ACCELERATOR   Accelerator table
BITMAP   Bitmap resource
DIALOG   Dialog box
FONT   Font resource
FONTDIR   Font directory resource
MENU   Menu resource
RCDATA   Application-defined resource (raw data)
STRING   String-table entry
MESSAGETABLE   Message-table entry
CURSOR   Hardware-dependent cursor resource
GROUP_CURSOR   Hardware-independent cursor resource
ICON   Hardware-dependent icon resource
GROUP_ICON   Hardware-independent icon resource

"Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !"

[letzte Aktualisierung 27.01.2007]