Sign in Join
Wiki copytemporary

Ressourcefile/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Ressourcefile/de

OldNewLine
1+Zurück zu den [[Additional information/de|Zusätzlichen Informationen]].
2+
3+Dieser Artikel bezieht sich auf Lazarus Version 1.0.6 und höher.
4+
5+Dieser Artikel beschäftigt sich mit den Grundlagen von Ressourcen-Dateien.
6+
7+# Einleitung
8+
9+Dieser Artikel beschreibt die Erstellung und Verwendung von Ressourcendateien speziell für die Programmierung unter Windows.
10+
11+Als Beispiel dient das Einfügen von mehreren Ressourcen in das eigene Windowsprogramm.
12+
13+## Möglichkeiten eine Ressourcendatei einzubinden
14+
15+Eine Ressourcendatei kann auf zwei Wegen in das eigene Programm eingebunden werden:
16+
17+- als Textdatei (*.rc)
18+- vorcompiliert als Binärdatei (*.res)
19+
20+## Kommentare in einer Ressourcendatei
21+
22+In Recourcendateien sind Kommentare grundsätzlich möglich und auch erlaubt.
23+
24+Es gibt zwei Arten von Kommentaren Einzelkommentare und Blockkommentare.
25+
26+Einzelkommentarzeichen // kennzeichnen nur eine einzelne Zeile oder das Ende einer Zeile als Kommentar.
27+
28+Blockkommentarzeichen /* */ kennzeichnen eine einzelne oder mehrere Zeilen als Kommentar.
29+
30+Beispiel für einen Einzelkommentar:
31+
32+`NeuesIcon  ICON Neu.ico  // ein zusätzliches Icon für das Programm.`
33+
34+Beispiel für einen Blockkommentar:
35+
36+`/* `\
37+` In dieser Datei (test.rc) sind alle`\
38+` Recourcen für das Programm`\
39+` enthalten.`\
40+`*/`
41+
42+# Schritt 1: Erstellen der Ressourcendatei als Textdatei
43+
44+Zuerst müssen Sie sich die einzubindenden Ressourcen (Icons, Bitmaps, usw.) erstellen oder beschaffen.
45+
46+Dann erstellen Sie mit einem Texteditor (z. B. Notepad) eine Datei mit der Endung **.rc**. Eine Ressourcendatei muss immer die Dateiendung **.rc** haben.
47+
48+In diese Ressourcendatei tragen Sie die einzelnen Recourcen (Icon, Bitmap, JPEG) nach folgendem Schema ein:
49+
50+\[Der Name unter dem die Recource (Icon, Bitmap, JPEG, usw.) in Ihrem Programm verwendet werden soll\] \[Ressourcentyp\] \[Name der einzubindenden Datei\]
51+
52+Beispiel für den Aufbau der Ressourcendatei:
53+
54+`/* ICONS */`\
55+`MAINICON ICON "Bubble.ico"`\
56+`ZWEITES ICON "Buy.ico"`\
57+`DRITTES ICON "Calendar.ico"`\
58+`VIERTES ICON "Clipboard.ico"`\
59+`/* Grafiken */`\
60+`HINTERGRUNDBMP BITMAP "Hintergrund.bmp"`\
61+`HINTERGRUNDJPG RCDATA "Hintergrund.jpg"`\
62+`HINTERGRUNDGIF RCDATA "Hintergrund.gif"`\
63+`HINTERGRUNDPNG RCDATA "Hintergrund.png"`\
64+`/* Cursors */`\
65+`FarbCursorNormal CURSOR FarbCursorNormal.cur`\
66+`FarbCursorAlternativ CURSOR FarbCursorAlternativ.cur`\
67+`/* Klaenge */`\
68+`TON WAVE "Ton.wav"`
69+
70+Vergessen Sie das Speichern der Ressourcendatei nicht.
71+
72+In diesem Beispiel heisst die Ressourcendatei test.rc.
73+
74+# Schritt 2: Einbinden der Ressourcendatei in das eigene Programm
75+
76+## Möglichkeit 1: Verwenden der Ressourcendatei als Textdatei
77+
78+### Einbinden der Ressourcendatei als Textdatei
79+
80+Die Ressourcendatei (test.rc) wird mit der Compilerdirektive \$R in das Programm eingebunden.
81+
82+``` pascal
83+unit ...;
84+{$mode objfpc}{$H+}
85+{$R test.rc}
86+...
87+interface
88+```
89+
90+## Möglichkeit 2: Verwenden der Ressourcendatei als Binärdatei
91+
92+Dies ist nur unter Windows 32 Bit möglich, da nur dort der Ressourcen-Compiler windres.exe zum Lieferumfang gehört.
93+
94+### Compilieren der Ressourcendatei zur Binärdatei
95+
96+Das Programm windres.exe gehört zum Lieferumfang von FreePascal.
97+
98+Das Programm windres.exe ist ein Konsolenprogramm. Das heisst, das Programm windres hat keine grafische Oberfläche und wird an der Konsole bedient.
99+
100+Das Programm windres.exe findet sich im Binärverzeichnis von Free Pascal.
101+
102+Das Programm windres.exe findet sich evtl. unter folgendem Pfad %ProgramFiles%\lazarus\fpc\2.6.0\bin\i386-win32.
103+
104+Syntax:
105+
106+`windres -i [Eingabedatei] -o [Ausgabedatei]`
107+
108+Beispiel:
109+
110+`windres -i test.rc -o test.res`
111+
112+### Einbinden der Ressourcendatei als Binärdatei
113+
114+Die compilierte Ressourcendatei (test.res) wird mit der Compilerdirektive \$R in das Programm eingebunden.
115+
116+``` pascal
117+unit ...;
118+{$mode objfpc}{$H+}
119+{$R test.res}
120+...
121+interface
122+```
123+
124+# Verwenden der Ressource im eigenen Programmcode
125+
126+## Verwenden eines Icons
127+
128+Im Beispiel wird das Icon haus.ico über seinen Alias ZWEITES dem Formular als Icon zugewiesen.
129+
130+``` pascal
131+Form1.Icon.LoadFromResourceName(hInstance,'ZWEITES');
132+```
133+
134+Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Icon anzeigen.
135+
136+## Verwenden einer Bitmap
137+
138+Im Beispiel wird die Bitmap Hintergrund.bmp über ihren Alias HINTERGRUNDBMP einem TImage als Bild zugewiesen.
139+
140+``` pascal
141+ ...
142+
143+var
144+ // deklarieren der Hilfsvariable
145+ Bmp: TBitmap;
146+begin
147+
148+ ...
149+
150+ // erstellt die Hilfsvariable
151+ Bmp := TBitmap.Create;
152+
153+ try
154+ // weist der Hilfsvariablen die Ressource zu
155+ Bmp.LoadFromResourceName(HInstance, 'HINTERGRUNDBMP');
156+ // weist den Inhalt der Hilfsvariablen dem Image zu
157+ Form1.Image1.Picture.Assign(Bmp);
158+ finally
159+ // Freigabe der Hilfsvariable
160+ FreeAndNil(Bmp);
161+ end;
162+
163+ ...
164+
165+end;
166+```
167+
168+Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
169+
170+## Verwenden einer JPG-Datei (selbstdefinierte Resource)
171+
172+Für die Konstante RT_RCDATA wird die Unit <b>Windows</b> benötigt.
173+
174+Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.
175+
176+``` pascal
177+ ...
178+uses
179+ Windows, ...
180+ ...
181+
182+var
183+ // deklarieren der Hilfsvariablen
184+ JPGImage: TJPEGImage; // Hilfsvariable 1
185+ RS: TResourceStream; // Hilfsvariable 2
186+begin
187+
188+ ...
189+
190+ // erstellt die Hilfsvariable 1
191+ JPGImage := TJPEGImage.Create;
192+ try
193+ // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
194+ RS := TResourceStream.Create(hInstance, 'HINTERGRUNDJPG', RT_RCDATA);
195+ try
196+ // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
197+ JPGImage.LoadFromStream(RS);
198+ // weist den Inhalt der Hilfsvariablen 1 dem Image zu
199+ Form1.Image1.Picture.Assign(JPGImage);
200+ finally
201+ // Freigabe der Hilfsvariablen 2
202+ FreeAndNil(RS);
203+ end;
204+ finally
205+ // Freigabe der Hilfsvariablen 1
206+ FreeAndNil(JPGImage);
207+ end;
208+
209+ ...
210+
211+end;
212+```
213+
214+Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
215+
216+## Verwenden einer Gif-Datei (selbstdefinierte Resource)
217+
218+Für die Konstante RT_RCDATA wird die Unit <b>Windows</b> benötigt.
219+
220+Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.
221+
222+``` pascal
223+ ...
224+uses
225+ Windows, ...
226+ ...
227+
228+var
229+ // deklarieren der Hilfsvariablen
230+ GifImage: TGifImage; // Hilfsvariable 1
231+ RS: TResourceStream; // Hilfsvariable 2
232+begin
233+
234+ ...
235+
236+ // erstellt die Hilfsvariable 1
237+ GifImage := TGifImage.Create;
238+ try
239+ // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
240+ RS := TResourceStream.Create(hInstance, 'HINTERGRUNDGIF', RT_RCDATA);
241+ try
242+ // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
243+ GifImage.LoadFromStream(RS);
244+ // weist den Inhalt der Hilfsvariablen 1 dem Image zu
245+ Form1.Image1.Picture.Assign(GifImage);
246+ finally
247+ // Freigabe der Hilfsvariablen 2
248+ FreeAndNil(RS);
249+ end;
250+ finally
251+ // Freigabe der Hilfsvariablen 1
252+ FreeAndNil(GifImage);
253+ end;
254+
255+ ...
256+
257+end;
258+```
259+
260+Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
261+
262+## Verwenden einer PNG-Datei (selbstdefinierte Resource)
263+
264+Für die Konstante RT_RCDATA wird die Unit **Windows** benötigt.
265+
266+Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.
267+
268+``` pascal
269+ ...
270+uses
271+ Windows, Graphics, Classes, ...
272+ ...
273+
274+var
275+ // deklarieren der Hilfsvariablen
276+ PNGImage: TPicture; // Hilfsvariable 1
277+ RS: TResourceStream; // Hilfsvariable 2
278+begin
279+
280+ ...
281+
282+ // erstellt die Hilfsvariable 1
283+ PNGImage := TPicture.Create;
284+ try
285+ // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
286+ RS := TResourceStream.Create(hInstance, 'HINTERGRUNDPNG', RT_RCDATA);
287+ try
288+ // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
289+ PNGImage.LoadFromStream(RS);
290+ // weist den Inhalt der Hilfsvariablen 1 dem Image zu
291+ Form1.Image1.Picture.Assign(PNGImage);
292+ finally
293+ // Freigabe der Hilfsvariablen 2
294+ FreeAndNil(RS);
295+ end;
296+ finally
297+ // Freigabe der Hilfsvariablen 1
298+ FreeAndNil(PNGImage);
299+ end;
300+
301+ ...
302+
303+end;
304+```
305+
306+Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
307+
308+## Verwenden eines Mauszeigers
309+
310+``` pascal
311+ ...
312+var
313+ // deklarieren der Hilfsvariable
314+ MausCursor: TCursorImage;
315+begin
316+
317+ ...
318+
319+ // erstellt die Hilfsvariable
320+ MausCursor := TCursorImage.Create;
321+
322+ try
323+ // weist der Hilfsvariablen die Ressource zu
324+ MausCursor.LoadFromResourceName(HInstance, 'FarbCursorNormal');
325+ // weist den Handle der Hilfsvariablen dem Standardcursor zu
326+ Screen.Cursors[1] := MausCursor.ReleaseHandle;
327+ // aktiviert den Standardcursor
328+ Screen.Cursor := 1;
329+ finally
330+ // Freigabe der Hilfsvariable
331+ FreeAndNil(MausCursor);
332+ end;
333+
334+ ...
335+
336+end;
337+```
338+
339+Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft einen anderen Mauszeiger anzeigen.
340+
341+## Verwenden einer Wave-Datei
342+
343+``` pascal
344+
345+...
346+
347+Uses
348+ MMSystem, ...
349+
350+ ...
351+
352+ // deklarieren der Variablen
353+ hFind: THandle;
354+ hRes: THandle;
355+ wavLied: PChar;
356+
357+begin
358+
359+ ...
360+
361+ // ermittelt den Zeiger auf die Recource
362+ hFind := FindResource(HInstance, 'TON', 'WAVE');
363+
364+ // prüft, ob die Ressource gefunden wurde
365+ if hFind > 0 then
366+ begin
367+ // lädt die Recource
368+ hRes := LoadResource(HInstance, hFind);
369+ // prüft, ob die WAVE-Ressource geladen wurde
370+ if hRes > 0 then
371+ begin
372+ // sperrt die WAVE-Ressource für andere Unterprogramme
373+ // und weist ihren Inhalt dem Datentyp PChar zu
374+ wavLied := LockResource(hRes);
375+ try
376+ // prüft, ob die WAVE-Ressource zugewiesen wurde
377+ if Assigned(wavLied) then
378+ // spielt die WAVE-Ressource ab
379+ SndPlaySound(wavLied, snd_ASync or snd_Memory);
380+ finally
381+ // entsperrt die WAVE-Ressource
382+ UnlockResource(hRes);
383+ // gibt den Speicher der WAVE-Ressource frei
384+ FreeResource(hRes);
385+ end;
386+ end;
387+ end;
388+
389+ ...
390+
391+end;
392+```
393+
394+Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft eine andere WAV-Ressource ausführen.
395+
396+---
397+*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](/wiki-contact).*

Back to history