1

私はアプリケーションで約100個のアイコンのセットを使用しています。これらは固定の参照番号を使用してアクセスされ、これらの番号はユーザーがアイコンを選択できるようにもなっています。必要な3つの解像度は、16x16、32x32、および48x48です。これらの各解像度はTPngImageListに保持されており、これら3つの画像リスト(TArtImageLibraryImageLists)を含むTDataModuleを使用して「アイコンライブラリ」を作成しました。単純な「最初の使用時に作成」メソッドは、イメージリストのいずれかが必要な場合にこのTDataModuleをインスタンス化します。LargeImagesまたは画像リストへのアクセスを必要とするコントロールのそのようなプロパティは、必要な解像度関数を呼び出すことによって簡単に設定されます。

問題は、プログラムが起動するときのロード時間です。これは、高速のマシンでは約1秒です。明らかに最悪の原因は48x48の画像リストですが、処理を高速化するより優れたロードメカニズム(リソースファイルの使用など)があるかどうか疑問に思っています。または、画像リストを再フォーマットする方法はありますか?TreeViewなどの場合など、実行時にTImageListが必要です。

ありがとう、ブライアン。

var
  FInstance : TArtImageLibraryImageLists;

function ArtImageLibraryImageLists : TArtImageLibraryImageLists;
begin
  If not Assigned( FInstance ) then
    FInstance := TArtImageLibraryImageLists.Create( nil );
  Result := FInstance;
end;


function ArtIconLibraryImageList16 : TImageList;
begin
  Result := ArtImageLibraryImageLists.ImageList16;
end;

function ArtIconLibraryImageList32 : TImageList;
begin
  Result := ArtImageLibraryImageLists.ImageList32;
end;

function ArtIconLibraryImageList48 : TImageList;
begin
  Result := ArtImageLibraryImageLists.ImageList48Shadow;
end;
4

1 に答える 1

0
  1. 「単純な「最初の使用時に作成」メソッドがこの TDataModule をインスタンス化する」とあなたは言いますが、問題は起動時間だと言います。データモジュールが実際に作成されるのはいつですか?
  2. イメージ リストの読み込みに問題があることを確認するために、アプリケーションのプロファイルを作成しましたか?
  3. 問題が実際に画像リストにある場合、png が必要でしたか? それらがそのまま保存されている場合は、デコードしてイメージリスト ビットマップに追加する必要があります。ImageList_LoadImage() は、1 ステップでビットマップをロードできます。
于 2010-10-28T13:26:09.127 に答える