0

Delphi2007アプリケーションのリソースファイルを作成しました。リソースファイルには、10個のビットマップエントリが含まれています。リソースファイルを再帰的に調べてすべてのビットマップをイメージリストにロードする方法があるのか​​、それとも一度に1つずつ引き出す必要があるのか​​疑問に思いました。

前もって感謝します。

4

2 に答える 2

5

現在のモジュールのすべての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;
于 2013-02-01T23:45:07.443 に答える
3

「リソースファイルを再帰的に調べる」ことで、名前がわからなくてもリソースをロードできるのではないかと思います。そのために、特定のモジュールのリソースを列挙できる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;
于 2013-02-01T23:27:12.520 に答える