我已经创建了一个Delphi 2007应用程序的资源文件。资源文件包含10个位图条目。我想知道是否有一种方法可以通过递归浏览资源文件来将所有位图加载到Imagelist中,或者我必须一次将它们拉出来。从资源文件递归导入德尔福2007
在此先感谢。
我已经创建了一个Delphi 2007应用程序的资源文件。资源文件包含10个位图条目。我想知道是否有一种方法可以通过递归浏览资源文件来将所有位图加载到Imagelist中,或者我必须一次将它们拉出来。从资源文件递归导入德尔福2007
在此先感谢。
我猜测用“递归浏览资源文件”你想问的是有可能加载资源而不知道它们的名字。为此,有一些API函数允许您枚举给定模块中的资源。有关更多信息,请参阅"Resource Overviews, Enumerating Resources"主题。
不过,既然你使嵌入的位图转换为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;
要从当前模块添加所有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;
您_recursively意思通过res文件?,我看不到任何递归可能在这里。 – jachguate
也许*迭代*(?)或类似的东西将是一个更合适的词?.. –
只需将它们拖出一个循环,并将它们添加到您的图像列表 –