Delphi2007アプリケーションのリソースファイルを作成しました。リソースファイルには、10個のビットマップエントリが含まれています。リソースファイルを再帰的に調べてすべてのビットマップをイメージリストにロードする方法があるのか、それとも一度に1つずつ引き出す必要があるのか疑問に思いました。
前もって感謝します。
Delphi2007アプリケーションのリソースファイルを作成しました。リソースファイルには、10個のビットマップエントリが含まれています。リソースファイルを再帰的に調べてすべてのビットマップをイメージリストにロードする方法があるのか、それとも一度に1つずつ引き出す必要があるのか疑問に思いました。
前もって感謝します。
現在のモジュールのすべてのRT_BITMAP
リソースタイプの画像を画像リストに追加するには、次を使用します。
uses
CommCtrl;
function EnumResNameProc(hModule: HMODULE; lpszType: LPCTSTR; lpszName: LPTSTR;
lParam: LONG_PTR): BOOL; stdcall;
var
BitmapHandle: HBITMAP;
begin
Result := True;
BitmapHandle := LoadBitmap(HInstance, lpszName);
if (BitmapHandle <> 0) then
begin
ImageList_Add(HIMAGELIST(lParam), BitmapHandle, 0);
DeleteObject(BitmapHandle);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumResourceNames(HInstance, RT_BITMAP, @EnumResNameProc,
LONG_PTR(ImageList1.Handle));
end;
「リソースファイルを再帰的に調べる」ことで、名前がわからなくてもリソースをロードできるのではないかと思います。そのために、特定のモジュールのリソースを列挙できるAPI関数のクラスがあります。詳細については、「リソースの概要、リソースの列挙」トピックを参照してください。
ただし、ビットマップを自分でexeに埋め込んでいるので、RC
ファイル内で簡単に反復できる名前を付ける方がはるかに簡単です。
img1 BITMAP foo.bmp
img2 BITMAP bar.bmp
ここでの名前「パターン」はimg
+数字です。これで、画像をループで簡単に読み込むことができます。
var x: Integer;
ResName: string;
begin
x := 1;
ResName := 'img1';
while(FindResource(hInstance, PChar(ResName), RT_BITMAP) <> 0)do begin
// load the resource and do something with it
...
// name for the next resource
Inc(x);
ResName := 'img' + IntToStr(x);
end;