Sign in Join
Wiki copytemporary

Ressourcefile/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:

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:

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

Beispiel für einen Blockkommentar:

text
/* 
 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:

text
/* 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.

pascal
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:

text
windres -i [Eingabedatei] -o [Ausgabedatei]

Beispiel:

text
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.

pascal
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.

pascal
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.

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;

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.

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;

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.

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;

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.

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;

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

Verwenden eines Mauszeigers

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;

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

Verwenden einer Wave-Datei

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;

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


From the Free Pascal wiki, page "Ressourcefile/de", as it stood on 2022-08-06 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 3, last changed by WikiArchive .

Edited on wiki.freepascal.org by 4 people, 2013–2022

From the official wiki's backup of 26 May 2024: who edited this page there, and when. Edits made there after that date were not recorded, and the earlier versions are not shown here; the main page says why.

WhenWhoWhat changed
OlafCreated page
OlafSchritt 1: Erstellen der Recourcendatei als Textdatei (minor)
OlafVerwenden der Recource im eigenen Programmcode (minor)
OlafMöglichkeit 2: Verwenden der Recourcendatei als Binärdatei (minor)
OlafMöglichkeit 2: Verwenden der Recourcendatei als Binärdatei (minor)
OlafMöglichkeit 2: Verwenden der Recourcendatei als Binärdatei (minor)
Billyraybonesmoved Recourcefile/de to Ressourcefile/de (minor)
Billyraybonestypos (minor)
BillyraybonesEinbinden der Recourcendatei als Textdatei (minor)
Olaf
OlafSchritt 1: Erstellen der Ressourcendatei als Textdatei (minor)
OlafSchritt 1: Erstellen der Ressourcendatei als Textdatei (minor)
OlafVerwenden einer Bitmap (minor)
OlafVerwenden einer Bitmap
OlafVerwenden einer JPG-Datei (selbstdefinierte Resource) (minor)
OlafVerwenden einer JPG-Datei (selbstdefinierte Resource) (minor)
Olaf (minor)
Olaf (minor)
OlafSchritt 1: Erstellen der Ressourcendatei als Textdatei (minor)
OlafEinleitung (minor)
Billyraybonessome typos (minor)
Olaf (minor)
OlafSchritt 1: Erstellen der Ressourcendatei als Textdatei (minor)
OlafSchritt 1: Erstellen der Ressourcendatei als Textdatei (minor)
OlafSchritt 1: Erstellen der Ressourcendatei als Textdatei (minor)
OlafVerwenden einer JPG-Datei (selbstdefinierte Resource)
OlafEinleitung
OlafMöglichkeiten eine Ressourcendatei einzubinden (minor)
OlafKommentare in einer Ressourcendatei (minor)
Olaf (minor)
OlafSchritt 1: Erstellen der Ressourcendatei als Textdatei (minor)
OlafSchritt 1: Erstellen der Ressourcendatei als Textdatei (minor)
OlafSchritt 1: Erstellen der Ressourcendatei als Textdatei (minor)
OlafVerwenden einer Gif-Datei (selbstdefinierte Resource) (minor)
OlafVerwenden einer PNG-Datei (selbstdefinierte Resource) (minor)
OlafVerwenden einer PNG-Datei (selbstdefinierte Resource) (minor)
OlafSchritt 1: Erstellen der Ressourcendatei als Textdatei (minor)
OlafVerwenden einer PNG-Datei (selbstdefinierte Resource)
Olaf
OlafVerwenden einer Wave-Datei (minor)
OlafVerwenden einer Wave-Datei (minor)
OlafVerwenden einer PNG-Datei (selbstdefinierte Resource) (minor)
OlafVerwenden einer Wave-Datei (minor)
Olaf (minor)
TrevFixed syntax highlighting; removed categories included in template (minor)
Kai Burghardtbypass redirect [cf. move]

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.