メディア ファイルを Delphi 実行可能ファイル(RC/.RES)に埋め込む方法

ラップトップを使用している女性

モモプロダクション/ストーン/ゲッティイメージズ





サウンドやアニメーションなどのマルチメディア ファイルを使用するゲームやその他の種類のアプリケーションは、追加のマルチメディア ファイルをアプリケーションと共に配布するか、実行可能ファイル内にファイルを埋め込む必要があります。

アプリケーションで使用するために個別のファイルを配布するのではなく、生データをリソースとしてアプリケーションに追加できます。その後、必要なときにアプリケーションからデータを取得できます。この手法は、他のユーザーがこれらのアドイン ファイルを操作するのを防ぐことができるため、一般的により望ましい方法です。



この記事では、 サウンド ファイル、ビデオ クリップ、アニメーション、およびより一般的にはあらゆる種類のバイナリ ファイルを Delphi 実行可能ファイルに埋め込む(および使用する)方法 .最も一般的な目的のために、 MP3ファイル 中に デルファイ EXE。

リソース ファイル (.RES)

「Resource Files Made Easy」の記事では、ビットマップ、アイコン、および カーソル リソースから。その記事で述べたように、イメージ エディターを使用して、そのような種類のファイルで構成されるリソースを作成および編集できます。ここで、Delphi 実行可能ファイル内にさまざまなタイプの(バイナリ)ファイルを格納することに関心がある場合は、リソース スクリプト ファイル(.rc)を処理する必要があります。 ボーランド リソース コンパイラ ツールとその他。



実行可能ファイルに複数のバイナリ ファイルを含めるには、次の 5 つの手順があります。

  1. exeに入れたいすべてのファイルを作成および/または収集します。
  2. アプリケーションで使用されるリソースを記述するリソース スクリプト ファイル (.rc) を作成します。
  3. リソース スクリプト ファイル (.rc) ファイルをコンパイルしてリソース ファイル (.res) を作成し、
  4. コンパイルされたリソース ファイルをアプリケーションの実行可能ファイルにリンクし、
  5. 個々のリソース要素を使用します。

最初のステップは簡単です。実行可能ファイルに保存するファイルの種類を決定するだけです。たとえば、2 つの .wav ソング、1 つの .ani アニメーション、および 1 つの .mp3 ソングを保存します。

先に進む前に、リソースを操作する際の制限に関するいくつかの重要なステートメントを次に示します。

  • リソースのロードとアンロードは、時間のかかる操作ではありません。リソースはアプリケーションの実行可能ファイルの一部であり、アプリケーションの実行と同時にロードされます。
  • リソースのロード/アンロード時に、すべての (空き) メモリを使用できます。つまり、同時にロードされるリソースの数に制限はありません。
  • もちろん、リソース ファイルは実行可能ファイルのサイズを 2 倍にします。より小さな実行可能ファイルが必要な場合は、リソースとプロジェクトの一部を ダイナミック リンク ライブラリ (DLL) またはそれ以上 特殊なバリエーション .

リソースを記述するファイルを作成する方法を見てみましょう。



リソース スクリプト ファイル (.RC) の作成

リソース スクリプト ファイルは、リソースを一覧表示する拡張子 .rc を持つ単純なテキスト ファイルです。スクリプト ファイルの形式は次のとおりです。

ResName1 ResTYPE1 ResFileName1
ResName2 ResTYPE2 ResFileName2
...
ResNameX ResTYPEX ResFileNameX
...

RexName リソースを識別する一意の名前または整数値 (ID) を指定します。 ResType リソースのタイプと ResFileName 個々のリソース ファイルへのフル パスとファイル名です。



新しいリソース スクリプト ファイルを作成するには、次の手順を実行します。

  1. プロジェクト ディレクトリに新しいテキスト ファイルを作成します。
  2. 名前を AboutDelphi.rc に変更します。

AboutDelphi.rc ファイルには、次の行があります。



クロック WAVE 'c:mysoundsprojectsclock.wav'
MailBeep WAVE 'c:windowsmedia ewmail.wav'
クールなAVI
イントロ RCDATA introsong.mp3

スクリプト ファイルは単にリソースを定義するだけです。指定された形式に従って、AboutDelphi.rc スクリプトは、2 つの .wav ファイル、1 つの .avi アニメーション、および 1 つの .mp3 曲をリストします。 .rc ファイル内のすべてのステートメントは、特定のリソースの識別名、タイプ、およびファイル名を関連付けます。約 12 の定義済みリソース タイプがあります。これらには、アイコン、ビットマップ、カーソル、アニメーション、曲などが含まれます。RCDATA は、汎用データ リソースを定義します。 RCDATA を使用すると、アプリケーションの生データ リソースを含めることができます。生データ リソースにより、バイナリ データを実行可能ファイルに直接含めることができます。たとえば、上記の RCDATA ステートメントは、アプリケーションのバイナリ リソースに Intro という名前を付け、その MP3 ファイルの曲を含むファイル introsong.mp3 を指定します。

注: .rc ファイルにリストしたすべてのリソースが利用可能であることを確認してください。ファイルがプロジェクト ディレクトリ内にある場合は、完全なファイル名を含める必要はありません。私の .rc ファイルでは、.wav の曲はディスクのどこかにあり、アニメーションと MP3 の曲は両方ともプロジェクトのディレクトリにあります。



リソース ファイル (.RES) の作成

リソース スクリプト ファイルで定義されたリソースを使用するには、Borland の Resource Compiler を使用して .res ファイルにコンパイルする必要があります。リソース コンパイラは、リソース スクリプト ファイルの内容に基づいて新しいファイルを作成します。通常、このファイルの拡張子は .res です。 Delphi リンカは、後で .res ファイルをリソース オブジェクト ファイルに再フォーマットし、それをアプリケーションの実行可能ファイルにリンクします。

Borland の Resource Compiler コマンド ライン ツールは、Delphi Bin ディレクトリにあります。名前はBRCC32.exeです。コマンド プロンプトに移動して brcc32 と入力し、Enter キーを押します。 DelphiBin ディレクトリが Path にあるため、Brcc32 コンパイラが呼び出され、使用法のヘルプが表示されます (パラメータなしで呼び出されたため)。

AboutDelphi.rc ファイルを .res ファイルにコンパイルするには、コマンド プロンプト (プロジェクト ディレクトリ内) で次のコマンドを実行します。

BRCC32 Delphi.RCについて

デフォルトでは、リソースをコンパイルするとき、BRCC32 はコンパイルされたリソース (.RES) ファイルに .RC ファイルのベース名を付けて、.RC ファイルと同じディレクトリに配置します。

拡張子「.RES」があり、拡張子のないファイル名がユニットまたはプロジェクトのファイル名と同じでない限り、リソース ファイルには任意の名前を付けることができます。デフォルトでは、アプリケーションにコンパイルされる各 Delphi プロジェクトには、プロジェクト ファイルと同じ名前で拡張子が .RES のリソース ファイルがあるため、これは重要です。プロジェクト ファイルと同じディレクトリにファイルを保存することをお勧めします。

実行可能ファイルへのリソースのインクルード (リンク/埋め込み)

.RES ファイルが実行可能ファイルにリンクされると、アプリケーションは必要に応じて実行時にそのリソースをロードできます。リソースを実際に使用するには、いくつかの Windows API 呼び出しを行う必要があります。

この記事に従うには、新しい Delphi プロジェクトが必要です。空白のフォーム(デフォルトの新しいプロジェクト)。もちろん、{$R AboutDelphi.RES} ディレクティブをメイン フォームのユニットに追加します。いよいよ、Delphi アプリケーションでリソースを使用する方法を見ていきます。前述のように、exe ファイル内に格納されたリソースを使用するには、API を処理する必要があります。ただし、「リソース」が有効な Delphi ヘルプ ファイルには、いくつかの方法が記載されています。

たとえば、 LoadFromResourceName TBitmap オブジェクトのメソッド。このメソッドは、指定されたビットマップ リソースを抽出し、それに TBitmap オブジェクトを割り当てます。これは、*まさに* LoadBitmap API 呼び出しが行うことです。いつものように、Delphi は API 関数呼び出しを改善して、ニーズにより適したものにしました。

ここで、TMediaPlayer コンポーネントをフォーム (名前: MediaPlayer1) に追加し、TButton (Button2) を追加します。 OnClick イベントを次のようにします。

1 つの小さな *問題* は、アプリケーションがユーザーのマシンで MP3 ソングを作成することです。アプリケーションが終了する前にそのファイルを削除するコードを追加できます。

*.??? を抽出しています。

もちろん、他のすべてのタイプのバイナリ ファイルは RCDATA タイプとして格納できます。 TRsourceStream は、実行可能ファイルからそのようなファイルを抽出できるように特別に設計されています。可能性は無限大です: exe 内の HTML、exe 内の EXE、exe 内の空のデータベースなど。