Einbetten von Mediendateien in eine ausführbare Delphi-Datei (RC / .RES)

Spiele und andere Arten von Anwendungen, die Multimediadateien wie Sounds und Animationen verwenden, müssen entweder die zusätzlichen Multimediadateien zusammen mit der Anwendung verteilen oder die Dateien in die ausführbare Datei einbetten.

Anstatt separate Dateien für die Verwendung Ihrer Anwendung zu verteilen, können Sie der Anwendung die Rohdaten als Ressource hinzufügen. Sie können die Daten dann bei Bedarf aus Ihrer Anwendung abrufen. Diese Technik ist im Allgemeinen wünschenswerter, da sie andere davon abhält, diese Add-In-Dateien zu bearbeiten.

Dieser Artikel wird Ihnen zeigen Einbetten (und Verwenden) von Audiodateien, Videoclips, Animationen und allgemeiner jeder Art von Binärdateien in eine ausführbare Delphi-Datei. Im Allgemeinen wird gezeigt, wie Sie eine MP3-Datei in eine Delphi-Exe einfügen.

Ressourcendateien (.RES)

Im Artikel "Resource Files Made Easy" wurden Ihnen verschiedene Beispiele für die Verwendung von Bitmaps, Symbolen und Cursorn aus Ressourcen vorgestellt. Wie in diesem Artikel erwähnt, können wir den Bildeditor verwenden, um Ressourcen zu erstellen und zu bearbeiten, die aus solchen Dateitypen bestehen. Wenn wir nun verschiedene Arten von (Binär-) Dateien in einer ausführbaren Delphi-Datei speichern möchten, müssen wir uns mit Ressourcenskriptdateien (.rc) befassen Borland Resource Compiler Werkzeug und andere.

Das Einfügen mehrerer Binärdateien in Ihre ausführbare Datei besteht aus 5 Schritten:

  1. Erstellen und / oder sammeln Sie alle Dateien, die Sie in eine Exe einfügen möchten.
  2. Erstellen Sie eine Ressourcenskriptdatei (.rc), die die von Ihrer Anwendung verwendeten Ressourcen beschreibt,
  3. Kompilieren Sie die Ressourcenskriptdatei (.rc), um eine Ressourcendatei (.res) zu erstellen.,
  4. Verknüpfen Sie die kompilierte Ressourcendatei mit der ausführbaren Datei der Anwendung,
  5. Verwenden Sie ein einzelnes Ressourcenelement.

Der erste Schritt sollte einfach sein. Entscheiden Sie einfach, welche Dateitypen Sie in Ihrer ausführbaren Datei speichern möchten. Zum Beispiel werden zwei .wav-Songs, eine .ani-Animation und ein .mp3-Song gespeichert.

Bevor wir fortfahren, sind hier einige wichtige Aussagen zu Einschränkungen beim Arbeiten mit Ressourcen:

  • Das Laden und Entladen von Ressourcen ist kein zeitaufwändiger Vorgang. Ressourcen sind Teil der ausführbaren Anwendungsdatei und werden beim Ausführen der Anwendung geladen.
  • Der gesamte (freie) Speicher kann zum Laden / Entladen von Ressourcen verwendet werden. Mit anderen Worten, die Anzahl der gleichzeitig geladenen Ressourcen ist unbegrenzt.
  • Natürlich verdoppeln Ressourcendateien die Größe einer ausführbaren Datei. Wenn Sie kleinere ausführbare Dateien benötigen, sollten Sie Ressourcen und Teile Ihres Projekts in einer DLL (Dynamic Link Library) oder einer spezielleren Variante ablegen.

Lassen Sie uns nun sehen, wie Sie eine Datei erstellen, die Ressourcen beschreibt.

Erstellen einer Ressourcenskriptdatei (.RC)

Eine Ressourcenskriptdatei ist eine einfache Textdatei mit der Erweiterung .rc, in der Ressourcen aufgelistet sind. Die Skriptdatei hat folgendes Format:

ResName1 ResTYPE1 ResFileName1
ResName2 ResTYPE2 ResFileName2

ResNameX ResTYPEX ResFileNameX

RexName Gibt entweder einen eindeutigen Namen oder einen ganzzahligen Wert (ID) an, der die Ressource identifiziert. ResType beschreibt die Art der Ressource und die ResFileName ist der vollständige Pfad und Dateiname der einzelnen Ressourcendatei.

Führen Sie einfach die folgenden Schritte aus, um eine neue Ressourcenskriptdatei zu erstellen:

  1. Erstellen Sie eine neue Textdatei in Ihrem Projektverzeichnis.
  2. Benennen Sie es in AboutDelphi.rc um.

Verfügen Sie in der AboutDelphi.rc-Datei über die folgenden Zeilen:

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

Die Skriptdatei definiert einfach Ressourcen. Entsprechend dem angegebenen Format listet das AboutDelphi.rc-Skript zwei .wav-Dateien, eine .avi-Animation und einen .mp3-Song auf. Alle Anweisungen in einer RC-Datei weisen einen identifizierenden Namen, einen Typ und einen Dateinamen für eine bestimmte Ressource zu. Es gibt ungefähr ein Dutzend vordefinierte Ressourcentypen. Dazu gehören Symbole, Bitmaps, Cursor, Animationen, Songs usw. Die RCDATA definiert allgemeine Datenressourcen. Mit RCDATA können Sie eine Rohdatenressource für eine Anwendung einbinden. Rohdatenressourcen ermöglichen die Einbindung von Binärdaten direkt in die ausführbare Datei. Die obige RCDATA-Anweisung benennt beispielsweise die Binärressource Intro der Anwendung und gibt die Datei introsong.mp3 an, die den Song für diese MP3-Datei enthält.

Hinweis: Stellen Sie sicher, dass alle in Ihrer RC-Datei aufgeführten Ressourcen verfügbar sind. Wenn sich die Dateien in Ihrem Projektverzeichnis befinden, müssen Sie nicht den vollständigen Dateinamen angeben. In meiner .rc-Datei befinden sich .wav-Songs * irgendwo * auf der Festplatte und sowohl die Animation als auch der MP3-Song befinden sich im Projektverzeichnis.

Erstellen einer Ressourcendatei (.RES)

Um die in der Ressourcenskriptdatei definierten Ressourcen zu verwenden, müssen Sie diese mit dem Resource Compiler von Borland in eine .res-Datei kompilieren. Der Ressourcen-Compiler erstellt eine neue Datei basierend auf dem Inhalt der Ressourcenskriptdatei. Diese Datei hat normalerweise die Erweiterung .res. Der Delphi-Linker formatiert die RES-Datei später in eine Ressourcenobjektdatei um und verknüpft sie dann mit der ausführbaren Datei einer Anwendung.

Das Befehlszeilentool Resource Compiler von Borland befindet sich im Verzeichnis Delphi Bin. Der Name lautet BRCC32.exe. Gehen Sie einfach zur Eingabeaufforderung und geben Sie brcc32 ein und drücken Sie die Eingabetaste. Da sich das Delphi \ Bin-Verzeichnis in Ihrem Pfad befindet, wird der Brcc32-Compiler aufgerufen und zeigt die Verwendungshilfe an (da es ohne Parameter aufgerufen wurde)..

Um die AboutDelphi.rc-Datei in eine .res-Datei zu kompilieren, führen Sie diesen Befehl an der Eingabeaufforderung (im Projektverzeichnis) aus:

BRCC32 AboutDelphi.RC

Beim Kompilieren von Ressourcen benennt BRCC32 die kompilierte Ressourcendatei (.RES) standardmäßig mit dem Basisnamen der .RC-Datei und legt sie im selben Verzeichnis wie die .RC-Datei ab.

Sie können der Ressourcendatei einen beliebigen Namen geben, sofern sie die Erweiterung ".RES" hat und der Dateiname ohne die Erweiterung nicht mit dem Namen einer Einheit oder eines Projekts übereinstimmt. Dies ist wichtig, da jedes Delphi-Projekt, das in eine Anwendung kompiliert wird, standardmäßig eine Ressourcendatei mit demselben Namen wie die Projektdatei, jedoch mit der Erweiterung .RES hat. Am besten speichern Sie die Datei im selben Verzeichnis wie Ihre Projektdatei.

Einbinden (Verknüpfen / Einbetten) von Ressourcen in ausführbare Dateien

Nachdem die .RES-Datei mit der ausführbaren Datei verknüpft wurde, kann die Anwendung ihre Ressourcen bei Bedarf zur Laufzeit laden. Um die Ressource tatsächlich zu nutzen, müssen Sie einige Windows-API-Aufrufe ausführen.

Um dem Artikel zu folgen, benötigen Sie ein neues Delphi-Projekt mit einem leeren Formular (das neue Standardprojekt). Natürlich fügen Sie die Direktive $ R AboutDelphi.RES zur Unit des Hauptformulars hinzu. Es ist endlich Zeit zu sehen, wie Ressourcen in einer Delphi-Anwendung verwendet werden. Wie oben erwähnt, müssen wir uns mit API befassen, um Ressourcen zu nutzen, die in einer exe-Datei gespeichert sind. In den Delphi-Hilfedateien finden Sie jedoch mehrere Methoden, die für "Ressourcen" aktiviert sind.

Schauen Sie sich zum Beispiel das an LoadFromResourceName Methode eines TBitmap-Objekts. Diese Methode extrahiert die angegebene Bitmap-Ressource und weist ihr TBitmap-Objekt zu. Dies ist genau das, was der LoadBitmap-API-Aufruf tut. Wie immer hat Delphi einen API-Funktionsaufruf verbessert, der Ihren Anforderungen besser entspricht.

Fügen Sie nun die TMediaPlayer-Komponente zu einem Formular hinzu (Name: MediaPlayer1) und fügen Sie einen TButton (Button2) hinzu. Lassen Sie das OnClick-Ereignis wie folgt aussehen:

Ein kleines * Problem * ist, dass die Anwendung auf einem Benutzercomputer einen MP3-Song erstellt. Sie können einen Code hinzufügen, der diese Datei löscht, bevor die Anwendung beendet wird.

Extrahieren *.???

Natürlich kann jeder andere Typ einer Binärdatei als RCDATA-Typ gespeichert werden. Der TRsourceStream wurde speziell dafür entwickelt, solche Dateien aus einer ausführbaren Datei zu extrahieren. Die Möglichkeiten sind endlos: HTML in einer Exe, EXE in einer Exe, leere Datenbank in einer Exe und so weiter.