私はアプリケーションで約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;