Sign in Join
Wiki copytemporary

Ressourcefile/de: what changed

Revision 1 to 2. 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
3232`NeuesIcon  ICON Neu.ico  // ein zusätzliches Icon für das Programm.`
3333
3434Beispiel für einen Blockkommentar:
3535
3636`/* `\
3737` In dieser Datei (test.rc) sind alle`\
3838` Recourcen für das Programm`\
3939` enthalten.`\
4040`*/`
4141
4242# Schritt 1: Erstellen der Ressourcendatei als Textdatei
4343
4444Zuerst müssen Sie sich die einzubindenden Ressourcen (Icons, Bitmaps, usw.) erstellen oder beschaffen.
4545
4646Dann erstellen Sie mit einem Texteditor (z. B. Notepad) eine Datei mit der Endung **.rc**. Eine Ressourcendatei muss immer die Dateiendung **.rc** haben.
4747
4848In diese Ressourcendatei tragen Sie die einzelnen Recourcen (Icon, Bitmap, JPEG) nach folgendem Schema ein:
4949
5050\[Der Name unter dem die Recource (Icon, Bitmap, JPEG, usw.) in Ihrem Programm verwendet werden soll\] \[Ressourcentyp\] \[Name der einzubindenden Datei\]
5151
5252Beispiel für den Aufbau der Ressourcendatei:
5353
5454`/* ICONS */`\
5555`MAINICON ICON "Bubble.ico"`\
5656`ZWEITES ICON "Buy.ico"`\
5757`DRITTES ICON "Calendar.ico"`\
5858`VIERTES ICON "Clipboard.ico"`\
5959`/* Grafiken */`\
6060`HINTERGRUNDBMP BITMAP "Hintergrund.bmp"`\
6161`HINTERGRUNDJPG RCDATA "Hintergrund.jpg"`\
6262`HINTERGRUNDGIF RCDATA "Hintergrund.gif"`\
6363`HINTERGRUNDPNG RCDATA "Hintergrund.png"`\
6464`/* Cursors */`\
6565`FarbCursorNormal CURSOR FarbCursorNormal.cur`\
6666`FarbCursorAlternativ CURSOR FarbCursorAlternativ.cur`\
6767`/* Klaenge */`\
6868`TON WAVE "Ton.wav"`
6969
7070Vergessen Sie das Speichern der Ressourcendatei nicht.
7171
7272In diesem Beispiel heisst die Ressourcendatei test.rc.
7373
7474# Schritt 2: Einbinden der Ressourcendatei in das eigene Programm
7575
7676## Möglichkeit 1: Verwenden der Ressourcendatei als Textdatei
7777
7878### Einbinden der Ressourcendatei als Textdatei
7979
8080Die Ressourcendatei (test.rc) wird mit der Compilerdirektive \$R in das Programm eingebunden.
8181
8282``` pascal
8383unit ...;
8484{$mode objfpc}{$H+}
8585{$R test.rc}
8686...
8787interface
8888```
8989
9090## Möglichkeit 2: Verwenden der Ressourcendatei als Binärdatei
9191
9292Dies ist nur unter Windows 32 Bit möglich, da nur dort der Ressourcen-Compiler windres.exe zum Lieferumfang gehört.
9393
9494### Compilieren der Ressourcendatei zur Binärdatei
9595
9696Das Programm windres.exe gehört zum Lieferumfang von FreePascal.
9797
9898Das Programm windres.exe ist ein Konsolenprogramm. Das heisst, das Programm windres hat keine grafische Oberfläche und wird an der Konsole bedient.
9999
100100Das Programm windres.exe findet sich im Binärverzeichnis von Free Pascal.
101101
102102Das Programm windres.exe findet sich evtl. unter folgendem Pfad %ProgramFiles%\lazarus\fpc\2.6.0\bin\i386-win32.
103103
104104Syntax:
105105
106106`windres -i [Eingabedatei] -o [Ausgabedatei]`
107107
108108Beispiel:
109109
110110`windres -i test.rc -o test.res`
111111
112112### Einbinden der Ressourcendatei als Binärdatei
113113
114114Die compilierte Ressourcendatei (test.res) wird mit der Compilerdirektive \$R in das Programm eingebunden.
115115
116116``` pascal
117117unit ...;
118118{$mode objfpc}{$H+}
119119{$R test.res}
120120...
121121interface
122122```
123123
124124# Verwenden der Ressource im eigenen Programmcode
125125
126126## Verwenden eines Icons
127127
128128Im Beispiel wird das Icon haus.ico über seinen Alias ZWEITES dem Formular als Icon zugewiesen.
129129
130130``` pascal
131131Form1.Icon.LoadFromResourceName(hInstance,'ZWEITES');
132132```
133133
134134Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Icon anzeigen.
135135
136136## Verwenden einer Bitmap
137137
138138Im Beispiel wird die Bitmap Hintergrund.bmp über ihren Alias HINTERGRUNDBMP einem TImage als Bild zugewiesen.
139139
140140``` pascal
141141 ...
142142
143143var
144144 // deklarieren der Hilfsvariable
145145 Bmp: TBitmap;
146146begin
147147
148148 ...
149149
150150 // erstellt die Hilfsvariable
151151 Bmp := TBitmap.Create;
152152
153153 try
154154 // weist der Hilfsvariablen die Ressource zu
155155 Bmp.LoadFromResourceName(HInstance, 'HINTERGRUNDBMP');
156156 // weist den Inhalt der Hilfsvariablen dem Image zu
157157 Form1.Image1.Picture.Assign(Bmp);
158158 finally
159159 // Freigabe der Hilfsvariable
160160 FreeAndNil(Bmp);
161161 end;
162162
163163 ...
164164
165165end;
166166```
167167
168168Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
169169
170170## Verwenden einer JPG-Datei (selbstdefinierte Resource)
171171
172-Für die Konstante RT_RCDATA wird die Unit <b>Windows</b> benötigt.
172+Für die Konstante RT_RCDATA wird die Unit Windows benötigt.
173173
174174Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.
175175
176176``` pascal
177177 ...
178178uses
179179 Windows, ...
180180 ...
181181
182182var
183183 // deklarieren der Hilfsvariablen
184184 JPGImage: TJPEGImage; // Hilfsvariable 1
185185 RS: TResourceStream; // Hilfsvariable 2
186186begin
187187
188188 ...
189189
190190 // erstellt die Hilfsvariable 1
191191 JPGImage := TJPEGImage.Create;
192192 try
193193 // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
194194 RS := TResourceStream.Create(hInstance, 'HINTERGRUNDJPG', RT_RCDATA);
195195 try
196196 // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
197197 JPGImage.LoadFromStream(RS);
198198 // weist den Inhalt der Hilfsvariablen 1 dem Image zu
199199 Form1.Image1.Picture.Assign(JPGImage);
200200 finally
201201 // Freigabe der Hilfsvariablen 2
202202 FreeAndNil(RS);
203203 end;
204204 finally
205205 // Freigabe der Hilfsvariablen 1
206206 FreeAndNil(JPGImage);
207207 end;
208208
209209 ...
210210
211211end;
212212```
213213
214214Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
215215
216216## Verwenden einer Gif-Datei (selbstdefinierte Resource)
217217
218-Für die Konstante RT_RCDATA wird die Unit <b>Windows</b> benötigt.
218+Für die Konstante RT_RCDATA wird die Unit Windows benötigt.
219219
220220Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.
221221
222222``` pascal
223223 ...
224224uses
225225 Windows, ...
226226 ...
227227
228228var
229229 // deklarieren der Hilfsvariablen
230230 GifImage: TGifImage; // Hilfsvariable 1
231231 RS: TResourceStream; // Hilfsvariable 2
232232begin
233233
234234 ...
235235
236236 // erstellt die Hilfsvariable 1
237237 GifImage := TGifImage.Create;
238238 try
239239 // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
240240 RS := TResourceStream.Create(hInstance, 'HINTERGRUNDGIF', RT_RCDATA);
241241 try
242242 // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
243243 GifImage.LoadFromStream(RS);
244244 // weist den Inhalt der Hilfsvariablen 1 dem Image zu
245245 Form1.Image1.Picture.Assign(GifImage);
246246 finally
247247 // Freigabe der Hilfsvariablen 2
248248 FreeAndNil(RS);
249249 end;
250250 finally
251251 // Freigabe der Hilfsvariablen 1
252252 FreeAndNil(GifImage);
253253 end;
254254
255255 ...
256256
257257end;
258258```
259259
260260Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
261261
262262## Verwenden einer PNG-Datei (selbstdefinierte Resource)
263263
264264Für die Konstante RT_RCDATA wird die Unit **Windows** benötigt.
265265
266266Im Beispiel wird die Datei Hintergrund.jpg über ihren Alias HINTERGRUNDJPG einem TJPEGImage als Bild zugewiesen.
267267
268268``` pascal
269269 ...
270270uses
271271 Windows, Graphics, Classes, ...
272272 ...
273273
274274var
275275 // deklarieren der Hilfsvariablen
276276 PNGImage: TPicture; // Hilfsvariable 1
277277 RS: TResourceStream; // Hilfsvariable 2
278278begin
279279
280280 ...
281281
282282 // erstellt die Hilfsvariable 1
283283 PNGImage := TPicture.Create;
284284 try
285285 // erstellt die Hilfsvariable 2 und weist ihr die Ressource zu
286286 RS := TResourceStream.Create(hInstance, 'HINTERGRUNDPNG', RT_RCDATA);
287287 try
288288 // weist der Hilfsvariablen 1 den Inhalt der Hilfsvariablen 2 zu
289289 PNGImage.LoadFromStream(RS);
290290 // weist den Inhalt der Hilfsvariablen 1 dem Image zu
291291 Form1.Image1.Picture.Assign(PNGImage);
292292 finally
293293 // Freigabe der Hilfsvariablen 2
294294 FreeAndNil(RS);
295295 end;
296296 finally
297297 // Freigabe der Hilfsvariablen 1
298298 FreeAndNil(PNGImage);
299299 end;
300300
301301 ...
302302
303303end;
304304```
305305
306306Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft ein anderes Bild anzeigen.
307307
308308## Verwenden eines Mauszeigers
309309
310310``` pascal
311311 ...
312312var
313313 // deklarieren der Hilfsvariable
314314 MausCursor: TCursorImage;
315315begin
316316
317317 ...
318318
319319 // erstellt die Hilfsvariable
320320 MausCursor := TCursorImage.Create;
321321
322322 try
323323 // weist der Hilfsvariablen die Ressource zu
324324 MausCursor.LoadFromResourceName(HInstance, 'FarbCursorNormal');
325325 // weist den Handle der Hilfsvariablen dem Standardcursor zu
326326 Screen.Cursors[1] := MausCursor.ReleaseHandle;
327327 // aktiviert den Standardcursor
328328 Screen.Cursor := 1;
329329 finally
330330 // Freigabe der Hilfsvariable
331331 FreeAndNil(MausCursor);
332332 end;
333333
334334 ...
335335
336336end;
337337```
338338
339339Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft einen anderen Mauszeiger anzeigen.
340340
341341## Verwenden einer Wave-Datei
342342
343343``` pascal
344344
345345...
346346
347347Uses
348348 MMSystem, ...
349349
350350 ...
351351
352352 // deklarieren der Variablen
353353 hFind: THandle;
354354 hRes: THandle;
355355 wavLied: PChar;
356356
357357begin
358358
359359 ...
360360
361361 // ermittelt den Zeiger auf die Recource
362362 hFind := FindResource(HInstance, 'TON', 'WAVE');
363363
364364 // prüft, ob die Ressource gefunden wurde
365365 if hFind > 0 then
366366 begin
367367 // lädt die Recource
368368 hRes := LoadResource(HInstance, hFind);
369369 // prüft, ob die WAVE-Ressource geladen wurde
370370 if hRes > 0 then
371371 begin
372372 // sperrt die WAVE-Ressource für andere Unterprogramme
373373 // und weist ihren Inhalt dem Datentyp PChar zu
374374 wavLied := LockResource(hRes);
375375 try
376376 // prüft, ob die WAVE-Ressource zugewiesen wurde
377377 if Assigned(wavLied) then
378378 // spielt die WAVE-Ressource ab
379379 SndPlaySound(wavLied, snd_ASync or snd_Memory);
380380 finally
381381 // entsperrt die WAVE-Ressource
382382 UnlockResource(hRes);
383383 // gibt den Speicher der WAVE-Ressource frei
384384 FreeResource(hRes);
385385 end;
386386 end;
387387 end;
388388
389389 ...
390390
391391end;
392392```
393393
394394Mit dieser Vorgehensweise kann das Programm während der Programmlaufzeit beliebig oft eine andere WAV-Ressource ausführen.
395395
396396---
397397*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