Du kan lære å lage din egen programvare for enhver situasjon med den utmerkede  Programvarekrav Unleashed 
. Hvis du trenger å vite hvordan du skal legge ned ikoner, pekere, animerte markører, punktgrafikk, JPEG-bilder, wave filer, tekstfiler og andre filer inne i en Delphi kjørbar, bare fortsett å lese! 
 Bygge inn filer som ressurser i en Delphi kjørbar Det er mulig å legge ned alle typer filer i en kjørbar ved hjelp av ressursfiler (* Res). Visse typer ressurser er anerkjent av API og kan brukes direkte. Andre er rett og slett tatt som binære data og det er opp til deg å bruke dem. I denne artikkelen vil vi se eksempler på begge typer. 
 Å skape ressursfilen starter vi med kildefilen (* .RC), for eksempel heter RESOURCES.RC, som er en enkel tekstfil som inneholder ressursoppføringer ( navn, klasse og fil): 
 sample_bmp BITMAP sample.bmp 
 sample_ico ICON sample.ico 
 sample_cur CURSOR sample.cur 
 sample_ani ANICURSOR sample.ani 
 sample_jpg JPEG sample.jpg 
 sample_wav WAVE sample.wav 
 sample_txt TEKST sample.txt navnene på de ressurser (sample_bmp, sample_ico, etc.) er vilkårlig. Den type ressurs kan en anerkjent av APIer (punktgrafikk, ICON, markør) eller vilkårlig (JPEG, WAVE, tekst). Filnavnene spesifisere hvilke filer som vil bli inkludert i res fil (og senere i .EXE). 
 Nå må vi kompilere .RC fil å produsere res filen. For at vi kan bruke Borland Resource Compiler (brcc32.exe) at du kan sikkert finne i BIN-mappen Delphis. Det er en enkel kommandolinjeverktøy som forventer navnet på kildefilen som parameter: 
 C: \\ DELPHI \\ P0025 > brcc32 ressurser 
 Borland Resource Compiler versjon 5.40 
 Copyright (c) 1990, 1999 Inprise Corporation . Alle rettigheter reservert 
 C:. \\ DELPHI \\ P0025 > _ å instruere linker å bygge inn ressursfilen i den kjørbare, bruker vi ressursfilen direktivet ($ R eller $ RESSURS) i vår Pascal ource kode: 
 {$ R resources.res} Legge ressursene i programmet er lett for " recongnized " ressurser som punktgrafikk, ICON og CURSOR siden Windows API gir funksjoner (LoadBitmap, LoadIcon og LoadCursor henholdsvis) for å få håndtak for disse elementene, som for eksempel kan vi tildele til håndtaket eiendom av tilsvarende objekt: 
 Image1.Picture. Bitmap.Handle: = 
 LoadBitmap (hInstance, 'sample_bmp'); 
 Icon.Handle: = LoadIcon (hInstance, 'sample_ico'); 
 Screen.Cursors [1]: = LoadCursor (hInstance, ' sample_cur '); For flere alternativer når du legger bilde ressurser, se API LoadImage. 
 Andre ressurser er litt vanskeligere å håndtere. La oss starte med JPEG-bilder. Følgende funksjonen bruker TResourceStream å laste ressursen som en strøm som vil bli lastet inn i en TJPEGImage objekt: 
 funksjon GetResourceAsJpeg (konst resname: string): TJPEGImage; 
 Var 
 Stream: TResourceStream; 
 begynne 
 Stream: = TResourceStream.Create (hInstance, ResName, 'JPEG'); 
 prøve 
 Resultat: = TJPEGImage.Create; 
 Result.LoadFromStream (Stream); 
 endelig Stream.Free, 
 ende; 
 ende; Eksempel: 
 Var 
 Jpg: TJPEGImage; 
 begynne 
 //... 
 Jpg: = GetResourceAsJpeg ( 'sample_jpg'); 
 Image2.Picture.Bitmap.Assign (Jpg ), 
 Jpg.Free; 
 //... 
 slutten; For WAV-filer trenger vi en peker til ressursen lastet inn i minnet, og for en tekstfil vi må legge en ressurs i en streng. Vi kan gjøre det ved hjelp TResourceStream, men la oss se et eksempel med API: 
 funksjon GetResourceAsPointer (ResName: pchar; ResType: pchar; 
 ut Størrelse: Long): pekeren; 
 Var 
 InfoBlock: HRSRC; 
 GlobalMemoryBlock: HGLOBAL; 
 begynne 
 InfoBlock: = FindResource (hInstance, resname, restype); 
 hvis InfoBlock = 0 da 
 heve Exception.Create (SysErrorMessage (GetLastError)); 
 size: = SizeofResource (hInstance, InfoBlock); 
 hvis size = 0 da 
 heve Exception.Create (SysErrorMessage (GetLastError)); 
 GlobalMemoryBlock: = LoadResource (hInstance, InfoBlock); 
 hvis GlobalMemoryBlock = 0 da 
 heve Exception.Create (SysErrorMessage (GetLastError)); 
 Resultat: = LockResource (GlobalMemoryBlock); 
 hvis Resultat = null da 
 heve Exception.Create (SysErrorMessage (GetLastError )); 
 ende; 
 funksjon GetResourceAsString (ResName: pchar; ResType: pchar): string; 
 Var 
 ResData: pChar; 
 ResSize: Long; 
 begynne 
 ResData: = GetResourceAsPointer (resname, restype, ResSize), 
 SetString (Resultat, ResData, ResSize); 
 ende; Eksempel på anrop: 
 Var 
 sample_wav: pekeren; 
 prosedyre TForm1.FormCreate (Sender: TObject); 
 Var 
 størrelse: Long; 
 begynne 
 ... 
 sample_wav: = GetResourceAsPointer ( 'sample_wav', 'bølge', størrelse); 
 Memo1.Lines.Text: = GetResourceAsString ( 'sample_txt', 'tekst'); 
 ende; Når vi har bølgen ressurs lastet inn i minnet kan vi spille det så mange ganger som vi ønsker ved hjelp av API sndPlaySound deklarert i MMSystem enhet: 
 prosedyre TForm1.Button1Click (Sender: TObject); 
 begynne 
 sndPlaySound (sample_wav, SND_MEMORY eller SND_NODEFAULT eller SND_ASYNC); 
 ende; Det er noen ressurser (som fonter og animerte musepekere) som ikke kan brukes fra minnet. Vi nødvendigvis trenger å spare disse ressursene til en midlertidig fil på harddisken og last dem derfra. Følgende funksjon sparer en ressurs til en fil: 
 prosedyre SaveResourceAsFile (konst ResName: string; ResType: pchar; 
 const Filename: string); 
 begynne 
 med TResourceStream.Create (hInstance, ResName, ResType) gjør 
 prøve 
 SaveToFile (Filename); 
 endelig Kanal Gratis, 
 ende; 
 ende; Følgende funksjon gjør bruk av den forrige å lagre en ressurs i en midlertidig fil: 
 funksjon SaveResourceAsTempFile (konst ResName: string; 
 ResType: pchar): string; 
 begynne 
 Resultat: = CreateTempFile; 
 SaveResourceAsFile (ResName, ResType, Result); 
 ende; Diskusjonen av funksjonen CreateTempFile faller utenfor omfanget av denne artikkelen og gjennomføringen kan sees i eksempelet festet på nyhetsbrevet. 
 Følgende funksjon gjør bruk av SaveResourceAsTempFile å lagre en animert-markøren ressurs til en midlertidig fil, deretter den laster markøren fra filen med LoadImage og til slutt sletter den midlertidige filen. Funksjonen returnerer håndtaket som returneres av LoadImage: 
 funksjon GetResourceAsAniCursor (konst ResName: string): HCursor; 
 Var 
 CursorFile: string; 
 begynne 
 CursorFile: = SaveResourceAsTempFile (ResName, 'ANICURSOR '); 
 Resultat: = LoadImage (0, PChar (CursorFile), IMAGE_CURSOR, 0, etter 0, LR_DEFAULTSIZE eller LR_LOADFROMFILE), 
 DeleteFile (CursorFile); 
 hvis Resultat = 0 da 
 heve Exception.Create (SysErrorMessage (GetLastError)); 
 ende; Eksempel samtale: 
 Screen.Cursors [1]: = GetResourceAsAniCursor ( 'sample_ani'); 
 Form1.Cursor: = 1; Vel, det er det. Jeg håper du finner det nyttig. Du kan finne mer informasjon om ressursfiler i MSDN Library: 
 http://msdn.microsoft.com/library/en-us/winui/hh/winui/rc_6cs3.asp 
 Du finner hele kilde koden til denne artikkelen i arkivet som følger med Pascal Nyhetsbrev # 25. 
Embedding filer som ressurser i en Delphi executable
Previous:Angi dato /Time 
Next Page:Delphi 6 Personal Edition FAQ 
			 
        
