Hoe Delphi bronbestanden gebruikt

Van bitmaps tot pictogrammen tot cursors tot tekentabellen, elk Windows-programma gebruikt bronnen. Middelen zijn die elementen van een programma die het programma ondersteunen maar geen uitvoerbare code zijn. In dit artikel zullen we enkele voorbeelden bekijken van het gebruik van bitmaps, pictogrammen en cursors van bronnen.

Locatie van bronnen

Het plaatsen van bronnen in het .exe-bestand heeft twee hoofdonderdelen voordelen:

  • De bronnen zijn sneller toegankelijk omdat het minder tijd kost om een ​​bron in het uitvoerbare bestand te vinden dan voor het laden van een schijfbestand.
  • Het programmabestand en de bronnen kunnen zich in een enkele eenheid (het .exe-bestand) bevinden zonder dat er veel ondersteunende bestanden nodig zijn.

De afbeeldingseditor

Allereerst moeten we een bronbestand maken. De standaard extensie voor bronbestanden is .RES. Bronbestanden kunnen worden gemaakt met Delphi's Image Editor.

U kunt het bronbestand een willekeurige naam geven, zolang het de extensie ".RES" heeft en de bestandsnaam zonder de extensie niet hetzelfde is als een bestands- of projectbestandsnaam. Dit is belangrijk, omdat elk Delphi-project dat in een toepassing wordt gecompileerd standaard een bronbestand heeft met dezelfde naam als het projectbestand, maar met de extensie ".RES". U kunt het bestand het beste opslaan in dezelfde map als uw projectbestand.

Bronnen opnemen in applicaties

Om toegang te krijgen tot ons eigen bronbestand, moeten we Delphi vertellen om ons bronbestand te koppelen aan onze applicatie. Dit wordt bereikt door een compilerrichtlijn aan de broncode toe te voegen. Deze richtlijn moet onmiddellijk de formulierrichtlijn volgen, zoals:

$ R * .DFM 
$ R DPABOUT.RES

Wis niet per ongeluk het gedeelte $ R * .DFM, omdat dit de coderegel is die Delphi vertelt om te linken in het visuele gedeelte van het formulier. Wanneer u bitmaps kiest voor snelheidsknoppen, afbeeldingscomponenten of knopcomponenten, neemt Delphi het gekozen bitmapbestand op als onderdeel van de bron van het formulier. Delphi isoleert uw gebruikersinterface-elementen in het .DFM-bestand.

Als u de bron daadwerkelijk wilt gebruiken, moet u enkele Windows API-aanroepen uitvoeren. Bitmaps, cursors en pictogrammen die zijn opgeslagen in RES-bestanden kunnen worden opgehaald met behulp van de API-functies LoadBitmap, LoadCursor, en LoadIcon respectievelijk.

Afbeeldingen in bronnen

Het eerste voorbeeld laat zien hoe u een bitmap kunt laden die is opgeslagen als een resource en deze kunt weergeven in een TImage bestanddeel.

procedure TfrMain.btnCanvasPic (afzender: TObject);
var bBitmap: TBitmap;
beginnen
bBitmap: = TBitmap.Create;
proberen
bBitmap.Handle: = LoadBitmap (hInstance, 'ATHENA');
Image1.Width: = bBitmap.Width;
Image1.Height: = bBitmap.Height;
Image1.Canvas.Draw (0,0, bBitmap);
Tenslotte
bBitmap.Free;
einde;
einde;

Opmerking: als de bitmap die moet worden geladen niet in het bronbestand staat, wordt het programma nog steeds uitgevoerd, maar wordt de bitmap niet weergegeven. Deze situatie kan worden voorkomen door te testen of de bBitmap.Handle is nul na een oproep aan LoadBitmap () en het nemen van de juiste stappen. Het try / eindelijk gedeelte in de vorige code lost dit probleem niet op, het is alleen hier om ervoor te zorgen dat de bBitmap is vernietigd en het bijbehorende geheugen is vrijgegeven.

Een andere manier waarop we een bitmap van een bron kunnen weergeven, is als volgt:

procedure TfrMain.btnLoadPicClick (Sender: TObject);
beginnen
Image1.Picture.Bitmap.
LoadFromResourceName (hInstance, 'Earth');
einde;

Cursors in bronnen

Screen.Cursors [] is een reeks cursors geleverd door Delphi. Met behulp van bronbestanden kunnen we aangepaste cursors toevoegen aan de eigenschap Cursors. Tenzij we een van de standaardwaarden willen vervangen, is de beste strategie om cursornummers vanaf 1 te gebruiken.

procedure TfrMain.btnUseCursorClick (Sender: TObject);
const NewCursor = 1;
beginnen
Screen.Cursors [NewCursor]: =
LoadCursor (hInstance, 'CURHAND');
Image1.Cursor: = NewCursor;
einde;

Pictogrammen in bronnen

Als we naar Delphi's kijken Project-opties-Application instellingen, kunnen we vaststellen dat Delphi het standaardpictogram voor een project levert. Dit pictogram vertegenwoordigt de toepassing in Windows Verkenner en wanneer de toepassing is geminimaliseerd. We kunnen dit eenvoudig wijzigen door op de knop 'Pictogram laden' te klikken.

Als we bijvoorbeeld het pictogram van het programma willen animeren wanneer het programma wordt geminimaliseerd, dan volstaat de volgende code.

Voor de animatie hebben we een nodig TTimer component op een formulier. De code laadt twee pictogrammen uit het bronbestand in een array van Ticon voorwerpen; deze array moet in het openbare deel van het hoofdformulier worden aangegeven. We zullen het ook nodig hebben NrIco, dat is een variabele van het type Integer, aangegeven in de openbaar een deel. De NrIco wordt gebruikt om het volgende weer te geven pictogram bij te houden.

openbaar
nrIco: Integer;
MinIcon: array [0… 1] van TIcon;
...
procedure TfrMain.FormCreate (afzender: TObject);
beginnen
Minicon [0]: = TIcon.Create;
Minicon [1]: = TIcon.Create;
Minicon [0] .Handle: = LoadIcon (hInstance, 'icook);
Minicon [1] .Handle: = LoadIcon (hInstance, 'ICOFOLD);
NrIco: = 0;
Timer1.Interval: = 200;
einde;
...
procedure TfrMain.Timer1Timer (afzender: TObject);
beginif IsIconic (Application.Handle) vervolgens beginnen
NrIco: = (NrIco + 1) modern 2;
Application.Icon: = Minicon [NrIco];
einde;
einde;
...
procedure TfrMain.FormDestroy (afzender: TObject);
beginnen
Minicon [0] .Gratis;
Minicon [1] .Gratis;
einde;

In de Timer1.OnTimer event handler, IsMinimized functie wordt gebruikt om te zien of we ons hoofdpictogram moeten animeren of niet. Een betere manier om dit te bereiken zou zijn om de knoppen voor maximaliseren / minimaliseren vast te leggen en dan te handelen.

Laatste woorden

We kunnen alles (nou ja, niet alles) in bronbestanden plaatsen. Dit artikel heeft u laten zien hoe u bronnen kunt gebruiken om bitmap, cursor of een pictogram in uw Delphi-toepassing te gebruiken / weer te geven.

Opmerking: Wanneer we een Delphi-project op de schijf opslaan, maakt Delphi automatisch één .RES-bestand met dezelfde naam als het project (anders bevindt zich het hoofdpictogram van het project). Hoewel we dit bronbestand kunnen wijzigen, is dit niet aan te raden.