Adviezen

Mediabestanden insluiten in een Delphi Executable (RC / .RES)

Mediabestanden insluiten in een Delphi Executable (RC / .RES)

Games en andere soorten toepassingen die multimediabestanden gebruiken, zoals geluiden en animaties, moeten de extra multimediabestanden samen met de toepassing verspreiden of de bestanden in het uitvoerbare bestand insluiten.

In plaats van afzonderlijke bestanden te distribueren voor gebruik door uw toepassing, kunt u de onbewerkte gegevens als bron aan uw toepassing toevoegen. U kunt vervolgens de gegevens uit uw toepassing ophalen wanneer dit nodig is. Deze techniek is over het algemeen wenselijker omdat het anderen ervan kan weerhouden die invoegtoepassingsbestanden te manipuleren.

Bronbestanden (.RES)

In het artikel "Resource Files Made Easy" werden u verschillende voorbeelden gegeven van het gebruik van bitmaps, pictogrammen en cursors van bronnen. Zoals in dat artikel wordt vermeld, kunnen we de afbeeldingseditor gebruiken om bronnen te maken en te bewerken die uit dergelijke bestandstypen bestaan. Als we nu geïnteresseerd zijn in het opslaan van verschillende soorten (binaire) bestanden in een Delphi-uitvoerbaar bestand, moeten we omgaan met resource script-bestanden (.rc), de Borland broncompiler gereedschap en andere.

Het opnemen van verschillende binaire bestanden in uw uitvoerbare bestand bestaat uit 5 stappen:

  1. Maak en / of verzamel alle bestanden die u in een exe wilt plaatsen.
  2. Maak een bronscriptbestand (.rc) dat de bronnen beschrijft die door uw applicatie worden gebruikt,
  3. Compileer het resource script file (.rc) bestand om een ​​resource bestand (.res) aan te maken,
  4. Koppel het gecompileerde bronbestand aan het uitvoerbare bestand van de toepassing,
  5. Gebruik een individueel resource-element.

De eerste stap moet eenvoudig zijn, gewoon beslissen welke soorten bestanden u in uw uitvoerbare bestand wilt opslaan. We slaan bijvoorbeeld twee .wav-nummers, één .ani-animaties en één .mp3-nummer op.

Voordat we verder gaan, zijn hier een paar belangrijke opmerkingen over beperkingen bij het werken met bronnen:

  • Het laden en lossen van middelen is geen tijdrovende operatie. Bronnen maken deel uit van het uitvoerbare bestand van de toepassing en worden tegelijkertijd geladen wanneer de toepassing wordt uitgevoerd.
  • Al het (gratis) geheugen kan worden gebruikt bij het laden / lossen van bronnen. Met andere woorden, er zijn geen grenzen aan het aantal bronnen dat tegelijkertijd wordt geladen.
  • Natuurlijk zijn bronbestanden het dubbele van een uitvoerbaar bestand. Als u kleinere uitvoerbare bestanden wilt, kunt u overwegen bronnen en delen van uw project in een dynamische linkbibliotheek (DLL) te plaatsen of de meer gespecialiseerde variant.

Laten we nu kijken hoe we een bestand kunnen maken dat bronnen beschrijft.

Een Resource Script-bestand (.RC) maken

Een bron-scriptbestand is een eenvoudig tekstbestand met de extensie .rc dat bronnen weergeeft. Het scriptbestand heeft de volgende indeling:

ResName1 ResTYPE1 ResFileName1
ResName2 ResTYPE2 ResFileName2

ResNameX ResTYPEX ResFileNameX

RexName geeft een unieke naam of een geheel getal (ID) aan die de resource identificeert. restype beschrijft het type resource en de ResFileName is het volledige pad en de bestandsnaam van het afzonderlijke bronbestand.

Ga als volgt te werk om een ​​nieuw bronscriptbestand te maken:

  1. Maak een nieuw tekstbestand in uw projectmap.
  2. Wijzig de naam in AboutDelphi.rc.

In het bestand AboutDelphi.rc hebben de volgende regels:

Klok WAVE "c: mysounds projects clock.wav"
MailBeep WAVE "c: windows media newmail.wav"
Cool AVI cool.avi
Intro RCDATA introsong.mp3

Het scriptbestand definieert eenvoudigweg bronnen. Volgens het gegeven formaat geeft het AboutDelphi.rc-script twee .wav-bestanden, een .avi-animatie en een .mp3-nummer. Alle instructies in een .rc-bestand hebben een identificerende naam, type en bestandsnaam voor een bepaalde bron. Er zijn ongeveer een dozijn vooraf gedefinieerde resourcetypen. Deze omvatten pictogrammen, bitmaps, cursors, animaties, liedjes, enz. De RCDATA definieert generieke gegevensbronnen. Met RCDATA kunt u een onbewerkte gegevensbron voor een toepassing opnemen. Met onbewerkte gegevensbronnen kunnen binaire gegevens rechtstreeks in het uitvoerbare bestand worden opgenomen. De RCDATA-instructie hierboven geeft bijvoorbeeld de binaire bron Intro van de toepassing aan en geeft het bestand introsong.mp3 aan, dat het nummer voor dat MP3-bestand bevat.

Opmerking: zorg ervoor dat u alle bronnen in uw .rc-bestand beschikbaar hebt. Als de bestanden zich in uw projectmap bevinden, hoeft u niet de volledige bestandsnaam op te nemen. In mijn .rc-bestand staan ​​.wav-nummers * ergens * op de schijf en zowel de animatie als het MP3-nummer bevinden zich in de map van het project.

Een bronbestand (.RES) maken

Om de bronnen te gebruiken die in het bronscriptbestand zijn gedefinieerd, moeten we het compileren naar een .res-bestand met de Resource Compiler van Borland. De resource-compiler maakt een nieuw bestand op basis van de inhoud van het resource-scriptbestand. Dit bestand heeft meestal de extensie .res. De Delphi-linker zal het .res-bestand later opnieuw formatteren in een bronobjectbestand en het vervolgens koppelen aan het uitvoerbare bestand van een toepassing.

Het opdrachtregelprogramma van Borland's Resource Compiler bevindt zich in de map Delphi Bin. De naam is BRCC32.exe. Ga gewoon naar de opdrachtprompt en typ brcc32 en druk op Enter. Aangezien de Delphi Bin-directory zich in uw pad bevindt, wordt de Brcc32-compiler aangeroepen en wordt de help voor het gebruik weergegeven (aangezien deze zonder parameters werd aangeroepen).

Om het bestand AboutDelphi.rc te compileren naar een .res-bestand, voert u deze opdracht uit vanaf de opdrachtprompt (in de map projecten):

BRCC32 AboutDelphi.RC

Bij het compileren van bronnen geeft BRCC32 standaard het gecompileerde bronbestand (.RES) een naam met de basisnaam van het .RC-bestand en plaatst het in dezelfde map als het .RC-bestand.

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.

Inclusief (koppelen / insluiten) bronnen van uitvoerbare bestanden

Nadat het .RES-bestand is gekoppeld aan het uitvoerbare bestand, kan de toepassing de benodigde bronnen tijdens uitvoering uitvoeren. Om de bron daadwerkelijk te gebruiken, moet u enkele Windows API-aanroepen doen.

Om het artikel te volgen, hebt u een nieuw Delphi-project met een leeg formulier nodig (het standaard nieuwe project). Voeg natuurlijk de {$ R AboutDelphi.RES} -instructie toe aan de eenheid van het hoofdformulier. Het is eindelijk tijd om te zien hoe bronnen in een Delphi-toepassing kunnen worden gebruikt. Zoals hierboven vermeld, hebben we om API's te gebruiken die in een exe-bestand zijn opgeslagen, te maken met API. Er zijn echter verschillende methoden te vinden in de Delphi-helpbestanden die "resource" zijn ingeschakeld.

Kijk bijvoorbeeld eens naar de LoadFromResourceName methode van een TBitmap-object. Met deze methode wordt de opgegeven bitmapresource geëxtraheerd en wordt het TBitmap-object toegewezen. Dit is * precies * wat de LoadBitmap API-aanroep doet. Zoals altijd heeft Delphi een API-functieaanroep verbeterd om beter aan uw behoeften te voldoen.

Voeg nu de component TMediaPlayer toe aan een formulier (naam: MediaPlayer1) en voeg een TButton (Button2) toe. Laat het OnClick-evenement eruit zien:

Een klein * probleem * is dat de applicatie een MP3-nummer op een gebruikersmachine maakt. U kunt een code toevoegen waarmee dat bestand wordt verwijderd voordat de toepassing wordt beëindigd.

Extraheren *. ???

Natuurlijk kan elk ander type binair bestand worden opgeslagen als een RCDATA-type. De TRsourceStream is speciaal ontworpen om ons te helpen een dergelijk bestand uit een uitvoerbaar bestand te extraheren. De mogelijkheden zijn eindeloos: HTML in een exe, EXE in exe, lege database in een exe, enzovoort.