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

|