私はいくつかのコンパイルされたDelphiアプリケーション(20種類以上のexeとdllファイル)からなるプロジェクトに取り組んでおり、60以上の画像(16x16,24x24,32x32 、...)すべての間。いくつかのアプリケーション間で画像を共有する最良の方法
アイデア1:私はすべてのアプリケーション間で画像を共有する2つの異なる方法にかかわらましたが、私が優れているか分からない
は、資源を作成します。すべての画像を含む.resファイルへのリソースリンク参照を含むDLLプロジェクトのみです。各アプリケーションはdllをロードし、必要に応じてTImageListまたはTImageに必要なイメージを読み込みます。
長所:画像をリポジトリ内のネイティブ形式で保存することができます。
短所:デザイン時に画像が表示されるのは、実行時にのみ読み込まれるためです。また、イメージと同じ数の定数を作成するか、イメージと同じ数の値を持つセットを使用して、各イメージをリソースファイルの名前とは別に参照できるようにする必要があります。
アイデア2:
BPLとしてコンパイルし、すべてのアプリケーションの実行時のパッケージとして含まれているデータモジュールを作成します。画像をいくつかのTImageList(画像のサイズに依存)やTPngImageList(単一のコンポーネントにいくつかのサイズの画像を入れる)に追加します。
長所:このデータモジュールを必要なすべてのアプリケーションに追加し、使用する必要があるすべての画像を設計時に表示することができます。
短所:すべての画像は、使用する必要がある場合でもメモリにロードされます。 TImageList/TPngImageListに画像を追加/変更する際に、画像の順序が変更されないようにする必要があります。すべての画像は単一の.dfmに保存されます。
アイデア3:(新)
もコンパイルされたexeの間でイメージを共有する必要がある他のアプリケーションを見た後、私はまだ別のアイデアを持っていました。 すべての共有イメージを、コンパイル済みのファイルがあるサブフォルダ(例:Data)のプレーンpng/icoファイルとして保存します。
長所:すべての画像をメモリに読み込む必要はありません。必要なものを取得できます。これは、イメージの総数がかなり多い場合(この方法を使用する1つのアプリケーションではDataサブフォルダに1400個のイメージがある)、特に重要です。
短所:画像は誰にでも見える/利用可能になります。ユーザーのマシン上でもう少しディスク容量を使い切ることができます。
この2つのアイデアについてのコメントや、これをよりうまく達成する方法に関する他の提案をお願いしたいと思います。
ありがとうございます!
アイデア2について:実行時に必要としないイメージを解放することはできますか? – Jeff
実行時に不要なイメージを簡単に解放することはできません。主にTImageListから不要なイメージを削除すると、コントロールに割り当てられたイメージインデックスが正しくないためです誰がTImageListを使用しますか。 – smartins