Difference between revisions of "Ressourcefile/de"

From Free Pascal wiki
Jump to navigationJump to search
(bypass redirect [cf. move])
 
(38 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Recourcefile}}
+
{{Resourcefile}}
<br>
+
 
 +
 
 +
Zurück zu den [[Additional information/de|Zusätzlichen Informationen]].
 +
 
 +
 
 
__TOC__
 
__TOC__
<br>
+
 
 +
 
 +
Dieser Artikel bezieht sich auf Lazarus Version 1.0.6 und höher.
 +
 
 +
Dieser Artikel beschäftigt sich mit den Grundlagen von Ressourcen-Dateien.
 +
 
 +
 
 
=Einleitung=
 
=Einleitung=
Dieser Abschnitt gehört zur Windowsprogrammierung.<br>
+
 
Dieser Artikel beschreibt die Erstellung und Verwendung von Recourcendateien speziell für die Programmierung unter Windows.<br>
+
Dieser Artikel beschreibt die Erstellung und Verwendung von Ressourcendateien speziell für die Programmierung unter Windows.
Als Beispiel dient das Einfügen von mehreren Icons in das eigene Windowsprogramm.<br>
+
 
Die Frage warum dient das Erstellen einer Icon-Recource als Beispiel ist schnell beantwortet.<br>
+
Als Beispiel dient das Einfügen von mehreren Ressourcen in das eigene Windowsprogramm.
Das Beispiel mit den Icons lässt sich einfach und schnell nachvollziehen.<br>
+
 
Anderere Recourcen sind zum Teil komplexer aufgebaut und eignen sich deswegen nicht als Beispiel.<br>
+
==Möglichkeiten eine Ressourcendatei einzubinden==
<br>
+
 
Eine Recourcendatei kann auf zwei Wegen eingebunden werden:<br>
+
Eine Ressourcendatei kann auf zwei Wegen in das eigene Programm eingebunden werden:
 +
 
 
* als Textdatei (*.rc)
 
* als Textdatei (*.rc)
 
* vorcompiliert als Binärdatei (*.res)
 
* vorcompiliert als Binärdatei (*.res)
<br>
 
<br>
 
=Schritt 1: Erstellen der Recourcendatei als Textdatei=
 
Zu erst müssen Sie sich einige Icons erstellen oder beschaffen.<br>
 
Dann Erstellen Sich sich mit einem Texteditor (z. B. Notepad) eine Datei mit der Endung <b>.rc</b>.<br>
 
Die Recourcendatei muss die Dateiendung <b>.rc</b> haben.<br>
 
Diese Recourcendatei öffnen sie im Texteditor.<br>
 
In diese Recourcendatei tragen sie die Icons nach folgendem Schema ein:<br>
 
[Der Name unter dem das Icon in Ihrem Programm verwendet werden soll] [Recourcentyp] [Name der einzubindenen Datei]<br>
 
Beispiel für den Aufbau der Recourcendatei:<br>
 
MAINICON ICON "stern.ico"
 
ZWEITES ICON "haus.ico"
 
DRITTES ICON "blume.ico"
 
VIERTES ICON "baeume.ico"
 
<br>
 
Vergessen Sie das Speichern der Datei nicht.<br>
 
In diesem Beispiel heisst die Datei test.rc.<br>
 
<br>
 
<br>
 
  
=Möglichkeit 1: Verwenden der Recourcendatei als Textdatei=
+
==Kommentare in einer Ressourcendatei==
<br>
+
 
==Einbinden der Recourcendatei als Textdatei==
+
In Recourcendateien sind Kommentare grundsätzlich möglich und auch erlaubt.
Die Recourcendatei (test.rc) wird mit der Compilerdirektive $R in das Programm eingebunden.<br>
+
 
<syntaxhighlight>
+
Es gibt zwei Arten von Kommentaren Einzelkommentare und Blockkommentare.
 +
 
 +
Einzelkommentarzeichen // kennzeichnen nur eine einzelne Zeile oder das Ende einer Zeile als Kommentar.
 +
 
 +
Blockkommentarzeichen /* */ kennzeichnen eine einzelne oder mehrere Zeilen als Kommentar.
 +
 
 +
Beispiel für einen Einzelkommentar:
 +
 
 +
NeuesIcon  ICON Neu.ico  // ein zusätzliches Icon für das Programm.
 +
 
 +
Beispiel für einen Blockkommentar:
 +
 
 +
/*
 +
  In dieser Datei (test.rc) sind alle
 +
  Recourcen für das Programm
 +
  enthalten.
 +
*/
 +
 
 +
 
 +
=Schritt 1: Erstellen der Ressourcendatei als Textdatei=
 +
 
 +
Zuerst müssen Sie sich die einzubindenden Ressourcen (Icons, Bitmaps, usw.) erstellen oder beschaffen.
 +
 
 +
Dann erstellen Sie mit einem Texteditor (z. B. Notepad) eine Datei mit der Endung '''.rc'''. Eine Ressourcendatei muss immer die Dateiendung '''.rc''' haben.
 +
 
 +
In diese Ressourcendatei tragen Sie die einzelnen Recourcen (Icon, Bitmap, JPEG) nach folgendem Schema ein:
 +
 
 +
[Der Name unter dem die Recource (Icon, Bitmap, JPEG, usw.) in Ihrem Programm verwendet werden soll] [Ressourcentyp] [Name der einzubindenden Datei]
 +
 
 +
Beispiel für den Aufbau der Ressourcendatei:
 +
 
 +
/* ICONS */
 +
MAINICON ICON "Bubble.ico"
 +
ZWEITES ICON "Buy.ico"
 +
DRITTES ICON "Calendar.ico"
 +
VIERTES ICON "Clipboard.ico"
 +
/* Grafiken */
 +
HINTERGRUNDBMP BITMAP "Hintergrund.bmp"
 +
HINTERGRUNDJPG RCDATA "Hintergrund.jpg"
 +
HINTERGRUNDGIF RCDATA "Hintergrund.gif"
 +
HINTERGRUNDPNG RCDATA "Hintergrund.png"
 +
/* Cursors */
 +
FarbCursorNormal CURSOR FarbCursorNormal.cur
 +
FarbCursorAlternativ CURSOR FarbCursorAlternativ.cur
 +
/* Klaenge */
 +
TON WAVE "Ton.wav"
 +
 
 +
Vergessen Sie das Speichern der Ressourcendatei nicht.
 +
 
 +
In diesem Beispiel heisst die Ressourcendatei test.rc.
 +
 
 +
=Schritt 2: Einbinden der Ressourcendatei in das eigene Programm=
 +
 
 +
==Möglichkeit 1: Verwenden der Ressourcendatei als Textdatei==
 +
 
 +
===Einbinden der Ressourcendatei als Textdatei===
 +
 
 +
Die Ressourcendatei (test.rc) wird mit der Compilerdirektive $R in das Programm eingebunden.
 +
 
 +
<syntaxhighlight lang=pascal>
 
unit ...;
 
unit ...;
 
{$mode objfpc}{$H+}
 
{$mode objfpc}{$H+}
Line 45: Line 96:
 
interface
 
interface
 
</syntaxhighlight>
 
</syntaxhighlight>
<br>
+
 
<br>
+
==Möglichkeit 2: Verwenden der Ressourcendatei als Binärdatei==
=Möglichkeit 2: Verwenden der Recourcendatei als Binärdatei=
+
 
<br>
+
Dies ist nur unter Windows 32 Bit möglich, da nur dort der Ressourcen-Compiler windres.exe zum Lieferumfang gehört.
Dies ist nur unter Windows 32 Bit möglich, da nur dort der Resourcen-Compiler windres.exe zum Lieferumfang gehört.<br>
+
 
<br>
+
===Compilieren der Ressourcendatei zur Binärdatei===
==Compilieren der Recourcendatei zur Binärdatei==
+
 
<br>
+
Das Programm windres.exe gehört zum Lieferumfang von FreePascal.
Das Programm windres.exe gehört zum Lieferumfang von FreePascal.<br>
+
 
Das Programm windres.exe ist ein Konsolenprogramm. Das heisst, das Programm windres hat keine grafische Oberfläche und wird an der Konsole bedient.<br>
+
Das Programm windres.exe ist ein Konsolenprogramm. Das heisst, das Programm windres hat keine grafische Oberfläche und wird an der Konsole bedient.
Das Programm windres.exe findet sich im Binärverzeichnis von Freepascal.<br>
+
 
Das Programm windres.exe findet sich evtl. unter folgendem Pfad %ProgramFiles%\lazarus\fpc\2.6.0\bin\i386-win32.<br>
+
Das Programm windres.exe findet sich im Binärverzeichnis von Free Pascal.
<br>
+
 
Syntax:<br>
+
Das Programm windres.exe findet sich evtl. unter folgendem Pfad %ProgramFiles%\lazarus\fpc\2.6.0\bin\i386-win32.
 +
 
 +
Syntax:
 
  windres -i [Eingabedatei] -o [Ausgabedatei]
 
  windres -i [Eingabedatei] -o [Ausgabedatei]
Beispiel:<br>
+
 
 +
Beispiel:
 
  windres -i test.rc -o test.res
 
  windres -i test.rc -o test.res
<br>
+
 
<br>
+
 
==Einbinden der Recourcendatei als Binärdatei==
+
===Einbinden der Ressourcendatei als Binärdatei===
Die compilierte Recourcendatei (test.res) wird mit der Compilerdirektive $R in das Programm eingebunden.<br>
+
 
<syntaxhighlight>
+
Die compilierte Ressourcendatei (test.res) wird mit der Compilerdirektive $R in das Programm eingebunden.
 +
 
 +
<syntaxhighlight lang=pascal>
 
unit ...;
 
unit ...;
 
{$mode objfpc}{$H+}
 
{$mode objfpc}{$H+}
Line 73: Line 129:
 
interface
 
interface
 
</syntaxhighlight>
 
</syntaxhighlight>
<br>
 
<br>
 
  
=Verwenden der Recource im eigenen Programmcode=
+
=Verwenden der Ressource im eigenen Programmcode=
<br>
+
 
Im Beispiel wird das Icon haus.ico über seinen Alias ZWEITES dem Formular als Icon zugewiesen.<br>
+
==Verwenden eines Icons==
<syntaxhighlight>
+
 
 +
Im Beispiel wird das Icon haus.ico über seinen Alias ZWEITES dem Formular als Icon zugewiesen.
 +
 
 +
<syntaxhighlight lang=pascal>
 
Form1.Icon.LoadFromResourceName(hInstance,'ZWEITES');
 
Form1.Icon.LoadFromResourceName(hInstance,'ZWEITES');
 
</syntaxhighlight>
 
</syntaxhighlight>
Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Icon anzeigen.<br>
+
 
<br>
+
Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Icon anzeigen.
<br>
+
 
--[[User:Olaf|Olaf]] 09:38, 16 February 2013 (UTC)
+
==Verwenden einer Bitmap==
[[Category:Tutorials/de]]{{AutoCategory}}
+
 
 +
Im Beispiel wird die Bitmap Hintergrund.bmp über ihren Alias HINTERGRUNDBMP einem TImage als Bild zugewiesen.
 +
 
 +
<syntaxhighlight lang=pascal>
 +
  ...
 +
 
 +
var
 +
  // deklarieren der Hilfsvariable
 +
  Bmp: TBitmap;
 +
begin
 +
 
 +
  ...
 +
 
 +
  // erstellt die Hilfsvariable
 +
  Bmp := TBitmap.Create;
 +
 
 +
  try
 +
    // weist der Hilfsvariablen die Ressource zu
 +
    Bmp.LoadFromResourceName(HInstance, 'HINTERGRUNDBMP');
 +
    // weist den Inhalt der Hilfsvariablen dem Image zu
 +
    Form1.Image1.Picture.Assign(Bmp);
 +
  finally
 +
    // Freigabe der Hilfsvariable
 +
    FreeAndNil(Bmp);
 +
  end;
 +
 
 +
  ...
 +
 
 +
end;
 +
</syntaxhighlight>
 +
 
 +
Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
 +
 
 +
==Verwenden einer JPG-Datei (selbstdefinierte Resource)==
 +
 
 +
Für die Konstante RT_RCDATA wird die Unit <b>Windows</b> benötigt.
 +
 
 +
Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.
 +
 
 +
<syntaxhighlight lang=pascal>
 +
  ...
 +
uses
 +
  Windows, ...
 +
  ...
 +
 
 +
var
 +
  // deklarieren der Hilfsvariablen
 +
  JPGImage: TJPEGImage;  // Hilfsvariable 1
 +
  RS: TResourceStream;  // Hilfsvariable 2
 +
begin
 +
 
 +
  ...
 +
 
 +
  // erstellt die Hilfsvariable 1
 +
  JPGImage := TJPEGImage.Create;
 +
  try
 +
    // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
 +
    RS := TResourceStream.Create(hInstance, 'HINTERGRUNDJPG', RT_RCDATA);
 +
    try
 +
      // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
 +
      JPGImage.LoadFromStream(RS);
 +
      // weist den Inhalt der Hilfsvariablen 1 dem Image zu
 +
      Form1.Image1.Picture.Assign(JPGImage);
 +
    finally
 +
      // Freigabe der Hilfsvariablen 2
 +
      FreeAndNil(RS);
 +
    end;
 +
  finally
 +
    // Freigabe der Hilfsvariablen 1
 +
    FreeAndNil(JPGImage);
 +
  end;
 +
 
 +
  ...
 +
 
 +
end;
 +
</syntaxhighlight>
 +
 
 +
Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
 +
 
 +
==Verwenden einer Gif-Datei (selbstdefinierte Resource)==
 +
 
 +
Für die Konstante RT_RCDATA wird die Unit <b>Windows</b> benötigt.
 +
 
 +
Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.
 +
 
 +
<syntaxhighlight lang=pascal>
 +
  ...
 +
uses
 +
  Windows, ...
 +
  ...
 +
 
 +
var
 +
  // deklarieren der Hilfsvariablen
 +
  GifImage: TGifImage;  // Hilfsvariable 1
 +
  RS: TResourceStream;  // Hilfsvariable 2
 +
begin
 +
 
 +
...
 +
 
 +
  // erstellt die Hilfsvariable 1
 +
  GifImage := TGifImage.Create;
 +
  try
 +
    // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
 +
    RS := TResourceStream.Create(hInstance, 'HINTERGRUNDGIF', RT_RCDATA);
 +
    try
 +
      // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
 +
      GifImage.LoadFromStream(RS);
 +
      // weist den Inhalt der Hilfsvariablen 1 dem Image zu
 +
      Form1.Image1.Picture.Assign(GifImage);
 +
    finally
 +
      // Freigabe der Hilfsvariablen 2
 +
      FreeAndNil(RS);
 +
    end;
 +
  finally
 +
    // Freigabe der Hilfsvariablen 1
 +
    FreeAndNil(GifImage);
 +
  end;
 +
 
 +
  ...
 +
 
 +
end;
 +
</syntaxhighlight>
 +
 
 +
Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
 +
 
 +
==Verwenden einer PNG-Datei (selbstdefinierte Resource)==
 +
 
 +
Für die Konstante RT_RCDATA wird die Unit '''Windows''' benötigt.
 +
 
 +
Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.
 +
 
 +
<syntaxhighlight lang=pascal>
 +
  ...
 +
uses
 +
  Windows, Graphics, Classes, ...
 +
  ...
 +
 
 +
var
 +
  // deklarieren der Hilfsvariablen
 +
  PNGImage: TPicture;  // Hilfsvariable 1
 +
  RS: TResourceStream; // Hilfsvariable 2
 +
begin
 +
 
 +
  ...
 +
 
 +
  // erstellt die Hilfsvariable 1
 +
  PNGImage := TPicture.Create;
 +
  try
 +
      // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
 +
      RS := TResourceStream.Create(hInstance, 'HINTERGRUNDPNG', RT_RCDATA);
 +
      try
 +
        // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
 +
        PNGImage.LoadFromStream(RS);
 +
        // weist den Inhalt der Hilfsvariablen 1 dem Image zu
 +
        Form1.Image1.Picture.Assign(PNGImage);
 +
      finally
 +
        // Freigabe der Hilfsvariablen 2
 +
        FreeAndNil(RS);
 +
      end;
 +
  finally
 +
      // Freigabe der Hilfsvariablen 1
 +
      FreeAndNil(PNGImage);
 +
  end;
 +
 
 +
  ...
 +
 
 +
end;
 +
</syntaxhighlight>
 +
 
 +
Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
 +
 
 +
==Verwenden eines Mauszeigers==
 +
 
 +
<syntaxhighlight lang=pascal>
 +
  ...
 +
var
 +
  // deklarieren der Hilfsvariable
 +
  MausCursor: TCursorImage;
 +
begin
 +
 
 +
  ...
 +
 
 +
  // erstellt die Hilfsvariable
 +
  MausCursor := TCursorImage.Create;
 +
 
 +
  try
 +
    // weist der Hilfsvariablen die Ressource zu
 +
    MausCursor.LoadFromResourceName(HInstance, 'FarbCursorNormal');
 +
    // weist den Handle der Hilfsvariablen dem Standardcursor zu
 +
    Screen.Cursors[1] := MausCursor.ReleaseHandle;
 +
    // aktiviert den Standardcursor
 +
    Screen.Cursor := 1;
 +
  finally
 +
    // Freigabe der Hilfsvariable
 +
    FreeAndNil(MausCursor);
 +
  end;
 +
 
 +
  ...
 +
 
 +
end;
 +
</syntaxhighlight>
 +
 
 +
Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft einen anderen Mauszeiger anzeigen.
 +
 
 +
==Verwenden einer Wave-Datei==
 +
 
 +
<syntaxhighlight lang=pascal>
 +
 
 +
...
 +
 
 +
Uses
 +
  MMSystem, ...
 +
 
 +
  ...
 +
 
 +
  // deklarieren der Variablen
 +
  hFind: THandle;
 +
  hRes: THandle;
 +
  wavLied: PChar;
 +
 
 +
begin
 +
 
 +
  ...
 +
 
 +
  // ermittelt den Zeiger auf die Recource
 +
  hFind := FindResource(HInstance, 'TON', 'WAVE');
 +
 
 +
  // prüft, ob die Ressource gefunden wurde
 +
  if hFind > 0 then
 +
  begin
 +
    // lädt die Recource
 +
    hRes := LoadResource(HInstance, hFind);
 +
    // prüft, ob die WAVE-Ressource geladen wurde
 +
    if hRes > 0 then
 +
    begin
 +
      // sperrt die WAVE-Ressource für andere Unterprogramme
 +
      // und weist ihren Inhalt dem Datentyp PChar zu
 +
      wavLied := LockResource(hRes);
 +
      try
 +
        // prüft, ob die WAVE-Ressource zugewiesen wurde
 +
        if Assigned(wavLied) then
 +
          // spielt die WAVE-Ressource ab
 +
          SndPlaySound(wavLied, snd_ASync or snd_Memory);
 +
      finally
 +
        // entsperrt die WAVE-Ressource
 +
        UnlockResource(hRes);
 +
        // gibt den Speicher der WAVE-Ressource frei
 +
        FreeResource(hRes);
 +
      end;
 +
    end;
 +
  end;
 +
 
 +
  ...
 +
 
 +
end;
 +
</syntaxhighlight>
 +
 
 +
Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft eine andere WAV-Ressource ausführen.

Latest revision as of 20:09, 6 August 2022

Windows logo - 2012.svg

Dieser Artikel behandelt ausschließlich Windows.

Siehe auch: Multiplatform Programming Guide/de

Deutsch (de)


Zurück zu den Zusätzlichen Informationen.



Dieser Artikel bezieht sich auf Lazarus Version 1.0.6 und höher.

Dieser Artikel beschäftigt sich mit den Grundlagen von Ressourcen-Dateien.


Einleitung

Dieser Artikel beschreibt die Erstellung und Verwendung von Ressourcendateien speziell für die Programmierung unter Windows.

Als Beispiel dient das Einfügen von mehreren Ressourcen in das eigene Windowsprogramm.

Möglichkeiten eine Ressourcendatei einzubinden

Eine Ressourcendatei kann auf zwei Wegen in das eigene Programm eingebunden werden:

  • als Textdatei (*.rc)
  • vorcompiliert als Binärdatei (*.res)

Kommentare in einer Ressourcendatei

In Recourcendateien sind Kommentare grundsätzlich möglich und auch erlaubt.

Es gibt zwei Arten von Kommentaren Einzelkommentare und Blockkommentare.

Einzelkommentarzeichen // kennzeichnen nur eine einzelne Zeile oder das Ende einer Zeile als Kommentar.

Blockkommentarzeichen /* */ kennzeichnen eine einzelne oder mehrere Zeilen als Kommentar.

Beispiel für einen Einzelkommentar:

NeuesIcon  ICON Neu.ico  // ein zusätzliches Icon für das Programm.

Beispiel für einen Blockkommentar:

/* 
 In dieser Datei (test.rc) sind alle
 Recourcen für das Programm
 enthalten.
*/


Schritt 1: Erstellen der Ressourcendatei als Textdatei

Zuerst müssen Sie sich die einzubindenden Ressourcen (Icons, Bitmaps, usw.) erstellen oder beschaffen.

Dann erstellen Sie mit einem Texteditor (z. B. Notepad) eine Datei mit der Endung .rc. Eine Ressourcendatei muss immer die Dateiendung .rc haben.

In diese Ressourcendatei tragen Sie die einzelnen Recourcen (Icon, Bitmap, JPEG) nach folgendem Schema ein:

[Der Name unter dem die Recource (Icon, Bitmap, JPEG, usw.) in Ihrem Programm verwendet werden soll] [Ressourcentyp] [Name der einzubindenden Datei]

Beispiel für den Aufbau der Ressourcendatei:

/* ICONS */
MAINICON ICON "Bubble.ico"
ZWEITES ICON "Buy.ico"
DRITTES ICON "Calendar.ico"
VIERTES ICON "Clipboard.ico"
/* Grafiken */
HINTERGRUNDBMP BITMAP "Hintergrund.bmp"
HINTERGRUNDJPG RCDATA "Hintergrund.jpg"
HINTERGRUNDGIF RCDATA "Hintergrund.gif"
HINTERGRUNDPNG RCDATA "Hintergrund.png"
/* Cursors */
FarbCursorNormal CURSOR FarbCursorNormal.cur
FarbCursorAlternativ CURSOR FarbCursorAlternativ.cur
/* Klaenge */
TON WAVE "Ton.wav"

Vergessen Sie das Speichern der Ressourcendatei nicht.

In diesem Beispiel heisst die Ressourcendatei test.rc.

Schritt 2: Einbinden der Ressourcendatei in das eigene Programm

Möglichkeit 1: Verwenden der Ressourcendatei als Textdatei

Einbinden der Ressourcendatei als Textdatei

Die Ressourcendatei (test.rc) wird mit der Compilerdirektive $R in das Programm eingebunden.

unit ...;
{$mode objfpc}{$H+}
{$R test.rc}
...
interface

Möglichkeit 2: Verwenden der Ressourcendatei als Binärdatei

Dies ist nur unter Windows 32 Bit möglich, da nur dort der Ressourcen-Compiler windres.exe zum Lieferumfang gehört.

Compilieren der Ressourcendatei zur Binärdatei

Das Programm windres.exe gehört zum Lieferumfang von FreePascal.

Das Programm windres.exe ist ein Konsolenprogramm. Das heisst, das Programm windres hat keine grafische Oberfläche und wird an der Konsole bedient.

Das Programm windres.exe findet sich im Binärverzeichnis von Free Pascal.

Das Programm windres.exe findet sich evtl. unter folgendem Pfad %ProgramFiles%\lazarus\fpc\2.6.0\bin\i386-win32.

Syntax:

windres -i [Eingabedatei] -o [Ausgabedatei]

Beispiel:

windres -i test.rc -o test.res


Einbinden der Ressourcendatei als Binärdatei

Die compilierte Ressourcendatei (test.res) wird mit der Compilerdirektive $R in das Programm eingebunden.

unit ...;
{$mode objfpc}{$H+}
{$R test.res}
...
interface

Verwenden der Ressource im eigenen Programmcode

Verwenden eines Icons

Im Beispiel wird das Icon haus.ico über seinen Alias ZWEITES dem Formular als Icon zugewiesen.

Form1.Icon.LoadFromResourceName(hInstance,'ZWEITES');

Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Icon anzeigen.

Verwenden einer Bitmap

Im Beispiel wird die Bitmap Hintergrund.bmp über ihren Alias HINTERGRUNDBMP einem TImage als Bild zugewiesen.

  ...

var
  // deklarieren der Hilfsvariable
  Bmp: TBitmap;
begin

  ...

  // erstellt die Hilfsvariable
  Bmp := TBitmap.Create;

  try
    // weist der Hilfsvariablen die Ressource zu
    Bmp.LoadFromResourceName(HInstance, 'HINTERGRUNDBMP');
    // weist den Inhalt der Hilfsvariablen dem Image zu
    Form1.Image1.Picture.Assign(Bmp);
  finally
    // Freigabe der Hilfsvariable
    FreeAndNil(Bmp);
  end;

  ...

end;

Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.

Verwenden einer JPG-Datei (selbstdefinierte Resource)

Für die Konstante RT_RCDATA wird die Unit Windows benötigt.

Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.

  ...
uses
  Windows, ...
  ...

var
  // deklarieren der Hilfsvariablen
   JPGImage: TJPEGImage;  // Hilfsvariable 1
   RS: TResourceStream;   // Hilfsvariable 2
begin

  ...

  // erstellt die Hilfsvariable 1
  JPGImage := TJPEGImage.Create;
  try
    // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
    RS := TResourceStream.Create(hInstance, 'HINTERGRUNDJPG', RT_RCDATA);
    try
      // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
      JPGImage.LoadFromStream(RS);
      // weist den Inhalt der Hilfsvariablen 1 dem Image zu
      Form1.Image1.Picture.Assign(JPGImage);
    finally
      // Freigabe der Hilfsvariablen 2
      FreeAndNil(RS);
    end;
  finally
    // Freigabe der Hilfsvariablen 1
    FreeAndNil(JPGImage);
  end;

  ...

end;

Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.

Verwenden einer Gif-Datei (selbstdefinierte Resource)

Für die Konstante RT_RCDATA wird die Unit Windows benötigt.

Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.

  ...
uses
  Windows, ...
  ...

var
  // deklarieren der Hilfsvariablen
   GifImage: TGifImage;   // Hilfsvariable 1
   RS: TResourceStream;   // Hilfsvariable 2
begin

 ...

  // erstellt die Hilfsvariable 1
  GifImage := TGifImage.Create;
  try
    // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
    RS := TResourceStream.Create(hInstance, 'HINTERGRUNDGIF', RT_RCDATA);
    try
      // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
      GifImage.LoadFromStream(RS);
      // weist den Inhalt der Hilfsvariablen 1 dem Image zu
      Form1.Image1.Picture.Assign(GifImage);
    finally
      // Freigabe der Hilfsvariablen 2
      FreeAndNil(RS);
    end;
  finally
    // Freigabe der Hilfsvariablen 1
    FreeAndNil(GifImage);
  end;

  ...

end;

Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.

Verwenden einer PNG-Datei (selbstdefinierte Resource)

Für die Konstante RT_RCDATA wird die Unit Windows benötigt.

Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.

  ...
uses
  Windows, Graphics, Classes, ...
  ...

var
  // deklarieren der Hilfsvariablen
   PNGImage: TPicture;  // Hilfsvariable 1
   RS: TResourceStream; // Hilfsvariable 2
begin

  ...

   // erstellt die Hilfsvariable 1
   PNGImage := TPicture.Create;
   try
      // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
      RS := TResourceStream.Create(hInstance, 'HINTERGRUNDPNG', RT_RCDATA);
      try
         // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
         PNGImage.LoadFromStream(RS);
         // weist den Inhalt der Hilfsvariablen 1 dem Image zu
         Form1.Image1.Picture.Assign(PNGImage);
      finally
         // Freigabe der Hilfsvariablen 2
         FreeAndNil(RS);
      end;
   finally
      // Freigabe der Hilfsvariablen 1
      FreeAndNil(PNGImage);
   end;

   ...

end;

Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.

Verwenden eines Mauszeigers

  ...
var
   // deklarieren der Hilfsvariable
   MausCursor: TCursorImage;
begin

  ...

  // erstellt die Hilfsvariable
  MausCursor := TCursorImage.Create;

  try
     // weist der Hilfsvariablen die Ressource zu
     MausCursor.LoadFromResourceName(HInstance, 'FarbCursorNormal');
     // weist den Handle der Hilfsvariablen dem Standardcursor zu
     Screen.Cursors[1] := MausCursor.ReleaseHandle;
     // aktiviert den Standardcursor
     Screen.Cursor := 1;
  finally
     // Freigabe der Hilfsvariable
     FreeAndNil(MausCursor);
  end;

  ...

end;

Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft einen anderen Mauszeiger anzeigen.

Verwenden einer Wave-Datei

...

Uses
  MMSystem, ...

  ...

  // deklarieren der Variablen
  hFind: THandle;
  hRes: THandle;
  wavLied: PChar;

begin

  ...

  // ermittelt den Zeiger auf die Recource
  hFind := FindResource(HInstance, 'TON', 'WAVE');

  // prüft, ob die Ressource gefunden wurde
  if hFind > 0 then
  begin
    // lädt die Recource
    hRes := LoadResource(HInstance, hFind);
    // prüft, ob die WAVE-Ressource geladen wurde
    if hRes > 0 then
    begin
      // sperrt die WAVE-Ressource für andere Unterprogramme
      // und weist ihren Inhalt dem Datentyp PChar zu
      wavLied := LockResource(hRes);
      try
        // prüft, ob die WAVE-Ressource zugewiesen wurde
        if Assigned(wavLied) then
          // spielt die WAVE-Ressource ab
          SndPlaySound(wavLied, snd_ASync or snd_Memory);
      finally
        // entsperrt die WAVE-Ressource
        UnlockResource(hRes);
        // gibt den Speicher der WAVE-Ressource frei
        FreeResource(hRes);
      end;
    end;
  end;

  ...

end;

Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft eine andere WAV-Ressource ausführen.