Sign in Join
Wiki copytemporary

Ressourcefile/de: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Zurück zu den [[Additional information/de|Zusätzlichen Informationen]].
22
33Dieser Artikel bezieht sich auf Lazarus Version 1.0.6 und höher.
44
55Dieser Artikel beschäftigt sich mit den Grundlagen von Ressourcen-Dateien.
66
77# Einleitung
88
99Dieser Artikel beschreibt die Erstellung und Verwendung von Ressourcendateien speziell für die Programmierung unter Windows.
1010
1111Als Beispiel dient das Einfügen von mehreren Ressourcen in das eigene Windowsprogramm.
1212
1313## Möglichkeiten eine Ressourcendatei einzubinden
1414
1515Eine Ressourcendatei kann auf zwei Wegen in das eigene Programm eingebunden werden:
1616
1717- als Textdatei (*.rc)
1818- vorcompiliert als Binärdatei (*.res)
1919
2020## Kommentare in einer Ressourcendatei
2121
2222In Recourcendateien sind Kommentare grundsätzlich möglich und auch erlaubt.
2323
2424Es gibt zwei Arten von Kommentaren Einzelkommentare und Blockkommentare.
2525
2626Einzelkommentarzeichen // kennzeichnen nur eine einzelne Zeile oder das Ende einer Zeile als Kommentar.
2727
2828Blockkommentarzeichen /* */ kennzeichnen eine einzelne oder mehrere Zeilen als Kommentar.
2929
3030Beispiel für einen Einzelkommentar:
3131
32-`NeuesIcon  ICON Neu.ico  // ein zusätzliches Icon für das Programm.`
32+```text
33+NeuesIcon ICON Neu.ico // ein zusätzliches Icon für das Programm.
34+```
3335
3436Beispiel für einen Blockkommentar:
3537
36-`/* `\
37-` In dieser Datei (test.rc) sind alle`\
38-` Recourcen für das Programm`\
39-` enthalten.`\
40-`*/`
38+```text
39+/*
40+ In dieser Datei (test.rc) sind alle
41+ Recourcen für das Programm
42+ enthalten.
43+*/
44+```
4145
4246# Schritt 1: Erstellen der Ressourcendatei als Textdatei
4347
4448Zuerst müssen Sie sich die einzubindenden Ressourcen (Icons, Bitmaps, usw.) erstellen oder beschaffen.
4549
4650Dann erstellen Sie mit einem Texteditor (z. B. Notepad) eine Datei mit der Endung **.rc**. Eine Ressourcendatei muss immer die Dateiendung **.rc** haben.
4751
4852In diese Ressourcendatei tragen Sie die einzelnen Recourcen (Icon, Bitmap, JPEG) nach folgendem Schema ein:
4953
5054\[Der Name unter dem die Recource (Icon, Bitmap, JPEG, usw.) in Ihrem Programm verwendet werden soll\] \[Ressourcentyp\] \[Name der einzubindenden Datei\]
5155
5256Beispiel für den Aufbau der Ressourcendatei:
5357
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"`
58+```text
59+/* ICONS */
60+MAINICON ICON "Bubble.ico"
61+ZWEITES ICON "Buy.ico"
62+DRITTES ICON "Calendar.ico"
63+VIERTES ICON "Clipboard.ico"
64+/* Grafiken */
65+HINTERGRUNDBMP BITMAP "Hintergrund.bmp"
66+HINTERGRUNDJPG RCDATA "Hintergrund.jpg"
67+HINTERGRUNDGIF RCDATA "Hintergrund.gif"
68+HINTERGRUNDPNG RCDATA "Hintergrund.png"
69+/* Cursors */
70+FarbCursorNormal CURSOR FarbCursorNormal.cur
71+FarbCursorAlternativ CURSOR FarbCursorAlternativ.cur
72+/* Klaenge */
73+TON WAVE "Ton.wav"
74+```
6975
7076Vergessen Sie das Speichern der Ressourcendatei nicht.
7177
7278In diesem Beispiel heisst die Ressourcendatei test.rc.
7379
7480# Schritt 2: Einbinden der Ressourcendatei in das eigene Programm
7581
7682## Möglichkeit 1: Verwenden der Ressourcendatei als Textdatei
7783
7884### Einbinden der Ressourcendatei als Textdatei
7985
8086Die Ressourcendatei (test.rc) wird mit der Compilerdirektive \$R in das Programm eingebunden.
8187
8288``` pascal
8389unit ...;
8490{$mode objfpc}{$H+}
8591{$R test.rc}
8692...
8793interface
8894```
8995
9096## Möglichkeit 2: Verwenden der Ressourcendatei als Binärdatei
9197
9298Dies ist nur unter Windows 32 Bit möglich, da nur dort der Ressourcen-Compiler windres.exe zum Lieferumfang gehört.
9399
94100### Compilieren der Ressourcendatei zur Binärdatei
95101
96102Das Programm windres.exe gehört zum Lieferumfang von FreePascal.
97103
98104Das Programm windres.exe ist ein Konsolenprogramm. Das heisst, das Programm windres hat keine grafische Oberfläche und wird an der Konsole bedient.
99105
100106Das Programm windres.exe findet sich im Binärverzeichnis von Free Pascal.
101107
102108Das Programm windres.exe findet sich evtl. unter folgendem Pfad %ProgramFiles%\lazarus\fpc\2.6.0\bin\i386-win32.
103109
104110Syntax:
105111
106-`windres -i [Eingabedatei] -o [Ausgabedatei]`
112+```text
113+windres -i [Eingabedatei] -o [Ausgabedatei]
114+```
107115
108116Beispiel:
109117
110-`windres -i test.rc -o test.res`
118+```text
119+windres -i test.rc -o test.res
120+```
111121
112122### Einbinden der Ressourcendatei als Binärdatei
113123
114124Die compilierte Ressourcendatei (test.res) wird mit der Compilerdirektive \$R in das Programm eingebunden.
115125
116126``` pascal
117127unit ...;
118128{$mode objfpc}{$H+}
119129{$R test.res}
120130...
121131interface
122132```
123133
124134# Verwenden der Ressource im eigenen Programmcode
125135
126136## Verwenden eines Icons
127137
128138Im Beispiel wird das Icon haus.ico über seinen Alias ZWEITES dem Formular als Icon zugewiesen.
129139
130140``` pascal
131141Form1.Icon.LoadFromResourceName(hInstance,'ZWEITES');
132142```
133143
134144Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Icon anzeigen.
135145
136146## Verwenden einer Bitmap
137147
138148Im Beispiel wird die Bitmap Hintergrund.bmp über ihren Alias HINTERGRUNDBMP einem TImage als Bild zugewiesen.
139149
140150``` pascal
141151 ...
142152
143153var
144154 // deklarieren der Hilfsvariable
145155 Bmp: TBitmap;
146156begin
147157
148158 ...
149159
150160 // erstellt die Hilfsvariable
151161 Bmp := TBitmap.Create;
152162
153163 try
154164 // weist der Hilfsvariablen die Ressource zu
155165 Bmp.LoadFromResourceName(HInstance, 'HINTERGRUNDBMP');
156166 // weist den Inhalt der Hilfsvariablen dem Image zu
157167 Form1.Image1.Picture.Assign(Bmp);
158168 finally
159169 // Freigabe der Hilfsvariable
160170 FreeAndNil(Bmp);
161171 end;
162172
163173 ...
164174
165175end;
166176```
167177
168178Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
169179
170180## Verwenden einer JPG-Datei (selbstdefinierte Resource)
171181
172182Für die Konstante RT_RCDATA wird die Unit Windows benötigt.
173183
174184Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.
175185
176186``` pascal
177187 ...
178188uses
179189 Windows, ...
180190 ...
181191
182192var
183193 // deklarieren der Hilfsvariablen
184194 JPGImage: TJPEGImage; // Hilfsvariable 1
185195 RS: TResourceStream; // Hilfsvariable 2
186196begin
187197
188198 ...
189199
190200 // erstellt die Hilfsvariable 1
191201 JPGImage := TJPEGImage.Create;
192202 try
193203 // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
194204 RS := TResourceStream.Create(hInstance, 'HINTERGRUNDJPG', RT_RCDATA);
195205 try
196206 // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
197207 JPGImage.LoadFromStream(RS);
198208 // weist den Inhalt der Hilfsvariablen 1 dem Image zu
199209 Form1.Image1.Picture.Assign(JPGImage);
200210 finally
201211 // Freigabe der Hilfsvariablen 2
202212 FreeAndNil(RS);
203213 end;
204214 finally
205215 // Freigabe der Hilfsvariablen 1
206216 FreeAndNil(JPGImage);
207217 end;
208218
209219 ...
210220
211221end;
212222```
213223
214224Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
215225
216226## Verwenden einer Gif-Datei (selbstdefinierte Resource)
217227
218228Für die Konstante RT_RCDATA wird die Unit Windows benötigt.
219229
220230Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.
221231
222232``` pascal
223233 ...
224234uses
225235 Windows, ...
226236 ...
227237
228238var
229239 // deklarieren der Hilfsvariablen
230240 GifImage: TGifImage; // Hilfsvariable 1
231241 RS: TResourceStream; // Hilfsvariable 2
232242begin
233243
234244 ...
235245
236246 // erstellt die Hilfsvariable 1
237247 GifImage := TGifImage.Create;
238248 try
239249 // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
240250 RS := TResourceStream.Create(hInstance, 'HINTERGRUNDGIF', RT_RCDATA);
241251 try
242252 // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
243253 GifImage.LoadFromStream(RS);
244254 // weist den Inhalt der Hilfsvariablen 1 dem Image zu
245255 Form1.Image1.Picture.Assign(GifImage);
246256 finally
247257 // Freigabe der Hilfsvariablen 2
248258 FreeAndNil(RS);
249259 end;
250260 finally
251261 // Freigabe der Hilfsvariablen 1
252262 FreeAndNil(GifImage);
253263 end;
254264
255265 ...
256266
257267end;
258268```
259269
260270Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
261271
262272## Verwenden einer PNG-Datei (selbstdefinierte Resource)
263273
264274Für die Konstante RT_RCDATA wird die Unit **Windows** benötigt.
265275
266276Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.
267277
268278``` pascal
269279 ...
270280uses
271281 Windows, Graphics, Classes, ...
272282 ...
273283
274284var
275285 // deklarieren der Hilfsvariablen
276286 PNGImage: TPicture; // Hilfsvariable 1
277287 RS: TResourceStream; // Hilfsvariable 2
278288begin
279289
280290 ...
281291
282292 // erstellt die Hilfsvariable 1
283293 PNGImage := TPicture.Create;
284294 try
285295 // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
286296 RS := TResourceStream.Create(hInstance, 'HINTERGRUNDPNG', RT_RCDATA);
287297 try
288298 // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
289299 PNGImage.LoadFromStream(RS);
290300 // weist den Inhalt der Hilfsvariablen 1 dem Image zu
291301 Form1.Image1.Picture.Assign(PNGImage);
292302 finally
293303 // Freigabe der Hilfsvariablen 2
294304 FreeAndNil(RS);
295305 end;
296306 finally
297307 // Freigabe der Hilfsvariablen 1
298308 FreeAndNil(PNGImage);
299309 end;
300310
301311 ...
302312
303313end;
304314```
305315
306316Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
307317
308318## Verwenden eines Mauszeigers
309319
310320``` pascal
311321 ...
312322var
313323 // deklarieren der Hilfsvariable
314324 MausCursor: TCursorImage;
315325begin
316326
317327 ...
318328
319329 // erstellt die Hilfsvariable
320330 MausCursor := TCursorImage.Create;
321331
322332 try
323333 // weist der Hilfsvariablen die Ressource zu
324334 MausCursor.LoadFromResourceName(HInstance, 'FarbCursorNormal');
325335 // weist den Handle der Hilfsvariablen dem Standardcursor zu
326336 Screen.Cursors[1] := MausCursor.ReleaseHandle;
327337 // aktiviert den Standardcursor
328338 Screen.Cursor := 1;
329339 finally
330340 // Freigabe der Hilfsvariable
331341 FreeAndNil(MausCursor);
332342 end;
333343
334344 ...
335345
336346end;
337347```
338348
339349Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft einen anderen Mauszeiger anzeigen.
340350
341351## Verwenden einer Wave-Datei
342352
343353``` pascal
344354
345355...
346356
347357Uses
348358 MMSystem, ...
349359
350360 ...
351361
352362 // deklarieren der Variablen
353363 hFind: THandle;
354364 hRes: THandle;
355365 wavLied: PChar;
356366
357367begin
358368
359369 ...
360370
361371 // ermittelt den Zeiger auf die Recource
362372 hFind := FindResource(HInstance, 'TON', 'WAVE');
363373
364374 // prüft, ob die Ressource gefunden wurde
365375 if hFind > 0 then
366376 begin
367377 // lädt die Recource
368378 hRes := LoadResource(HInstance, hFind);
369379 // prüft, ob die WAVE-Ressource geladen wurde
370380 if hRes > 0 then
371381 begin
372382 // sperrt die WAVE-Ressource für andere Unterprogramme
373383 // und weist ihren Inhalt dem Datentyp PChar zu
374384 wavLied := LockResource(hRes);
375385 try
376386 // prüft, ob die WAVE-Ressource zugewiesen wurde
377387 if Assigned(wavLied) then
378388 // spielt die WAVE-Ressource ab
379389 SndPlaySound(wavLied, snd_ASync or snd_Memory);
380390 finally
381391 // entsperrt die WAVE-Ressource
382392 UnlockResource(hRes);
383393 // gibt den Speicher der WAVE-Ressource frei
384394 FreeResource(hRes);
385395 end;
386396 end;
387397 end;
388398
389399 ...
390400
391401end;
392402```
393403
394404Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft eine andere WAV-Ressource ausführen.
395405
396406---
397407*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