Hur Delphi använder resursfiler

Från bitmappar till ikoner, markörer till strängtabeller använder alla Windows-program resurser. Resurser är de delar av ett program som stöder programmet men inte är körbar kod. I den här artikeln kommer vi att gå igenom några exempel på användning av bitmappar, ikoner och markörer från resurser.

Resursens placering

Att placera resurser i .exe-filen har två huvudsakliga fördelar:

  • Du kan komma åt resurserna snabbare eftersom det tar mindre tid att hitta en resurs i den körbara filen än det gör för att ladda den från en diskfil.
  • Programfilen och resurserna kan finnas i en enda enhet (.exe-filen) utan behov av många stödfiler.

Bildredigeraren

Först av allt måste vi skapa en resursfil. Standardförlängningen för resursfiler är.RES. Resursfiler kan skapas med Delphis Image Editor.

Du kan namnge resursfilen vad du vill, så länge den har tillägget ".RES" och filnamnet utan tillägg är inte detsamma som någon enhet eller projektfilnamn. Detta är viktigt, eftersom som standard varje Delphi-projekt som sammanställs i en applikation har en resursfil med samma namn som projektfilen, men med tillägget ".RES". Det är bäst att spara filen i samma katalog som din projektfil.

instagram viewer

Inklusive resurser i applikationer

För att få tillgång till vår egen resursfil måste vi berätta för Delphi att länka vår resursfil till vår applikation. Detta åstadkoms genom att lägga till ett kompilatordirektiv till källkoden. Detta direktiv måste omedelbart följa formulärdirektivet, som följande:

{$ R * .DFM} 
{$ R DPABOUT.RES}

Radera inte {$ R * .DFM} -delning av misstag, eftersom det här är kodraden som berättar för Delphi att länka i formens visuella del. När du väljer bitmappar för hastighetsknappar, bildkomponenter eller knappkomponenter inkluderar Delphi den bitmappsfil som du valde som en del av formulärets resurs. Delphi isolerar dina användargränssnittselement i .DFM-filen.

För att faktiskt använda resursen måste du göra några Windows API samtal. Bitmappar, markörer och ikoner som är lagrade i RES-filer kan hämtas med API-funktionerna LoadBitmap, LoadCursor, och LoadIcon respektive.

Bilder i resurser

Det första exemplet visar hur man laddar en bitmapp som är lagrad som en resurs och visar den i en TImage komponent.

procedur TfrMain.btnCanvasPic (avsändare: TObject);
var bBitmap: TBitmap;
Börja
bBitmap: = TBitmap. Skapa;
Prova
bBitmap. Handtag: = LoadBitmap (hInstance, 'ATHENA');
Bild1. Bredd: = bBitmap. Bredd;
Bild1.Höjd: = bBitmap. Höjd;
Image1.Canvas. Rita (0,0, bBitmap);
till sist
bBitmap. Fri;
slutet;
slutet;

Obs: Om bitmappen som ska laddas inte finns i resursfilen, kommer programmet fortfarande att köras, det visar bara inte bitmappen. Denna situation kan undvikas genom att testa för att se om bBitmap. Hantera är noll efter ett samtal till LoadBitmap () och vidta lämpliga steg. De prova / slutligen del i den föregående koden löser inte detta problem, det är bara här för att se till att bBitmap förstörs och dess tillhörande minne frigörs.

Ett annat sätt vi kan använda för att visa en bitmapp från en resurs är som följer:

procedur TfrMain.btnLoadPicClick (avsändare: TObject);
Börja
Image1.Picture. Bitmap.
LoadFromResourceName (hInstance, 'EARTH');
slutet;

Markörer i resurser

Skärm. Markörer [] är en array av markörer levererade av Delphi. Genom att använda resursfiler kan vi lägga till anpassade markörer i markören. Om vi ​​inte vill ersätta någon av standardvärdena, är den bästa strategin att använda markörnumret från 1.

procedur TfrMain.btnUseCursorClick (avsändare: TObject);
const NewCursor = 1;
Börja
Skärm. Markörer [NewCursor]: =
LoadCursor (hInstance, 'CURHAND');
Image1.Cursor: = NewCursor;
slutet;

Ikoner i resurser

Om vi ​​tittar på Delphis Projekt-Alternativ-Application inställningar, kan vi finna att Delphi levererar standardikonen för ett projekt. Denna ikon representerar applikationen i Windows Utforskaren och när applikationen är minimerad. Vi kan enkelt ändra detta genom att klicka på knappen "Ladda ikon".

Om vi ​​till exempel vill animera programikonen när programmet minimeras, kommer följande kod att göra jobbet.

För animeringen behöver vi en TTimer komponent på ett formulär. Koden laddar två ikoner från resursfilen i en matris med Ticon objekt; denna grupp måste deklareras i den offentliga delen av huvudformen. Vi kommer också att behöva NrIco, det är en heltalstyp variabel, förklarade i offentlig del. De NrIco används för att hålla reda på nästa ikon som ska visas.

offentlig
nrIco: heltal;
MinIcon: matris [0..1] av TIcon;
...
procedur TfrMain. FormCreate (avsändare: TObject);
Börja
Minicon [0]: = TiCON. Skapa;
Minicon [1]: = TiCON. Skapa;
MinIcon [0]. Handtag: = LoadIcon (hInstance, 'ICOOK');
MinIcon [1]. Handtag: = LoadIcon (hInstance, 'ICOFOLD');
NrIco: = 0;
Timer1.Interval: = 200;
slutet;
...
procedur TfrMain. Timer1Timer (avsändare: TObject);
beginif IsIconic (applikation. Hantera) sedanBörja
NrIco: = (NrIco + 1) mod 2;
Ansökan. Ikon: = Minicon [NrIco];
slutet;
slutet;
...
procedur TfrMain. FormDestroy (avsändare: TObject);
Börja
Minicon [0] .Gratis;
Minicon [1] .Gratis;
slutet;

I Timer1.OnTimer händelsehanterare, IsMinimized funktionen används för att se om vi behöver animera vår huvudikon eller inte. Ett bättre sätt att åstadkomma detta vore att fånga maximering / minimering av knapparna och än att agera.

Sista ord

Vi kan placera allt (ja, inte allt) i resursfiler. Den här artikeln har visat dig hur du använder resurser för att använda / visa bitmapp, markör eller en ikon i din Delphi-applikation.

Obs: När vi sparar ett Delphi-projekt på disken, skapar Delphi automatiskt en .RES-fil som har samma namn som projektet (om inget annat är huvudikonen för projektet inuti). Även om vi kan ändra denna resursfil är det inte tillrådligt.

instagram story viewer