Hvordan Delphi bruker ressursfiler

Fra bitmapper til ikoner til markører til strengetabeller bruker hvert Windows-program ressurser. ressurser er elementene i et program som støtter programmet, men er ikke kjørbar kode. I denne artikkelen skal vi gå gjennom noen eksempler på bruk av bitmapper, ikoner og markører fra ressurser.

Ressursens plassering

Å plassere ressurser i .exe-filen har to hovedinnhold fordeler:

  • Du får tilgang til ressursene raskere fordi det tar mindre tid å finne en ressurs i den kjørbare filen enn det gjør å laste den fra en diskfil.
  • Programfilen og ressursene kan være inneholdt i en enkelt enhet (.exe-filen) uten behov for mye støttefiler.

Bildeditoren

Først av alt, må vi lage en ressursfil. Standardutvidelsen for ressursfiler er.RES. Ressursfiler kan opprettes med Delphis Image Editor.

Du kan navngi ressursfilen hva du vil, så lenge den har utvidelsen ".RES" og filnavnet uten utvidelsen ikke er det samme som en enhets- eller prosjektfilnavn. Dette er viktig, fordi som standard hver Delphi-prosjekt som kompilerer til et program har en ressursfil med samme navn som prosjektfilen, men med utvidelsen ".RES". Det er best å lagre filen i samme katalog som prosjektfilen.

instagram viewer

Inkludert ressurser i applikasjoner

For å få tilgang til vår egen ressursfil, må vi be Delphi om å koble ressursfilen vår til applikasjonen vår. Dette oppnås ved å legge til et kompilatordirektiv til kildekoden. Dette direktivet må umiddelbart følge skjemiddirektivet, som følgende:

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

Ikke slett {$ R * .DFM} -del ved et uhell, da dette er kodelinjen som forteller Delphi å koble til skjemaets visuelle del. Når du velger bitmapper for hastighetsknapper, bildekomponenter eller knappkomponenter, inkluderer Delphi bitmappfilen du valgte som en del av skjemaets ressurs. Delphi isolerer brukergrensesnittelementene dine i .DFM-filen.

For å faktisk bruke ressursen, må du lage noen få Windows API samtaler. Bitmapper, markører og ikoner som er lagret i RES-filer kan hentes ved å bruke API-funksjonene LoadBitmap, LoadCursor, og LoadIcon henholdsvis.

Bilder i ressurser

Det første eksemplet viser hvordan du laster inn en bitmapp som er lagret som en ressurs og viser den i en TImage komponent.

fremgangsmåte TfrMain.btnCanvasPic (avsender: TObject);
Var bBitmap: TBitmap;
begynne
bBitmap: = TBitmap. Skape;
prøve
bBitmap. Håndtak: = LoadBitmap (hInstance, 'ATHENA');
Bilde1.Bredde: = bBitmap. Bredde;
Image1.Height: = bBitmap. Høyde;
Image1.Canvas. Tegn (0,0, bBitmap);
endelig
bBitmap. Gratis;
slutt;
slutt;

Merk: Hvis bitmappen som skal lastes ikke ikke er i ressursfilen, vil programmet fortsatt kjøres, det vil bare ikke vise bitmappen. Denne situasjonen kan unngås ved å teste for å se om bBitmap. Håndtak er null etter en samtale til LoadBitmap () og ta de nødvendige skritt. De prøve / endelig del av den forrige koden løser ikke dette problemet, det er bare her for å sikre at bBitmap blir ødelagt og tilhørende minne frigjøres.

En annen måte vi kan bruke til å vise et bitmapp fra en ressurs, er som følger:

fremgangsmåte TfrMain.btnLoadPicClick (avsender: TObject);
begynne
Image1.Picture. Bitmap.
LoadFromResourceName (hInstance, 'JORD');
slutt;

Markører i ressurser

Skjerm. Markører [] er en matrise av markører levert av Delphi. Ved å bruke ressursfiler, kan vi legge til tilpassede markører til markøren-egenskapen. Med mindre vi ønsker å erstatte noen av standardverdiene, er den beste strategien å bruke markørnumre fra 1.

fremgangsmåte TfrMain.btnUseCursorClick (avsender: TObject);
konst Ny markør = 1;
begynne
Skjerm. Markører [NewCursor]: =
LoadCursor (hInstance, 'CURHAND');
Image1.Cursor: = NewCursor;
slutt;

Ikoner i ressurser

Hvis vi ser på Delphi's Prosjekt-Options-søknad innstillinger, kan vi finne at Delphi leverer standardikonet for et prosjekt. Dette ikonet representerer applikasjonen i Windows Utforsker og når applikasjonen er minimert. Vi kan enkelt endre dette ved å klikke på 'Last ikon' -knappen.

Hvis vi for eksempel vil animere programikonet når programmet minimeres, vil følgende kode gjøre jobben.

For animasjonen trenger vi en TTimer komponent på et skjema. Koden laster inn to ikoner fra ressursfilen til en rekke Ticon objekter; denne matrisen må deklareres i den offentlige delen av hovedformen. Vi trenger også NrIco, det er en heltallstype variabel, erklært i offentlig del. De NrIco brukes til å holde oversikt over neste ikon som skal vises.

offentlig
nrIco: Heltall;
MinIcon: matrise [0..1] av TIcon;
...
fremgangsmåte TfrMain. FormCreate (avsender: TObject);
begynne
Minicon [0]: = Ticon. Skape;
Minicon [1]: = Ticon. Skape;
MinIcon [0]. Håndtak: = LoadIcon (hInstance, 'ICOOK');
MinIcon [1]. Håndtak: = LoadIcon (hInstance, 'ICOFOLD');
NrIco: = 0;
Timer1.Interval: = 200;
slutt;
...
fremgangsmåte TfrMain. Timer1Timer (avsender: TObject);
beginif IsIconic (applikasjon. Håndtak) deretterbegynne
NrIco: = (NrIco + 1) mod 2;
Applikasjon. Ikon: = Minicon [NrIco];
slutt;
slutt;
...
fremgangsmåte TfrMain. FormDestroy (avsender: TObject);
begynne
Minicon [0] .Gratis;
Minicon [1] .Gratis;
slutt;

I Timer1.OnTimer arrangementshåndterer, IsMinimized funksjonen brukes til å se om vi trenger å animere hovedikonet vårt eller ikke. En bedre måte å oppnå dette på ville være å fange maksimere / minimere knappene og enn å handle.

Avsluttende ord

Vi kan plassere hva som helst (vel, ikke alt) i ressursfiler. Denne artikkelen har vist deg hvordan du bruker ressurser til å bruke / vise bitmap, markør eller et ikon i Delphi-applikasjonen.

Merk: Når vi lagrer et Delphi-prosjekt på disken, oppretter Delphi automatisk en .RES-fil som har samme navn som prosjektet (hvis ikke noe annet, er hovedikonet for prosjektet inne). Selv om vi kan endre denne ressursfilen, anbefales det ikke.

instagram story viewer