Delphi - 更改任务栏图标
Delphi - Change taskbar icon
我有主要的 .exe 应用程序和带有表单的 .dll。从 .exe 我可以从 .dll 创建和显示表单,但它没有任务栏图标(和左上角的小图标)。我想从另一个 DLL 加载这个图标。请问我该怎么做?
以下是您需要做的事情。我没有包含太多细节,因为你的问题没有什么细节,而且我无法确切地知道你将如何将所有这些都融入你的程序中。重点是在高层次上明确你需要做什么。
加载包含资源的 DLL
使用 LoadLibrary
或 LoadLibraryEx
执行此操作。如果需要调用 DLL 中的代码,请使用前者。否则使用后者传递 LOAD_LIBRARY_AS_IMAGE_RESOURCE
。这两个函数都会产生一个模块句柄,HMODULE
.
从 DLL 加载图标
将 HMODULE
传递给 LoadIcon
或 LoadImage
以从资源加载图标。这些将产生 HICON
。将其分配给 TIcon
.
实例的 Handle
属性
将图标分配给表单
将您在上一步中获得的图标对象分配给表单的 Icon
属性。
非常感谢。我尝试了类似 Form.Icon.Assign(Icon); 的方法,但它创建了 AV 错误消息。这是工作代码:
procedure TformOptions.FormCreate(Sender: TObject);
var
lib: THandle;
icon: TIcon;
begin
icon := TIcon.Create;
lib := LoadLibrary('res.dll');
if lib > 0 then icon.Handle := LoadIcon(lib, 'ICON2');
if icon.Handle > 0 then Application.Icon.Assign(icon);
icon.Free;
FreeLibrary(lib);
end;
我有主要的 .exe 应用程序和带有表单的 .dll。从 .exe 我可以从 .dll 创建和显示表单,但它没有任务栏图标(和左上角的小图标)。我想从另一个 DLL 加载这个图标。请问我该怎么做?
以下是您需要做的事情。我没有包含太多细节,因为你的问题没有什么细节,而且我无法确切地知道你将如何将所有这些都融入你的程序中。重点是在高层次上明确你需要做什么。
加载包含资源的 DLL
使用 LoadLibrary
或 LoadLibraryEx
执行此操作。如果需要调用 DLL 中的代码,请使用前者。否则使用后者传递 LOAD_LIBRARY_AS_IMAGE_RESOURCE
。这两个函数都会产生一个模块句柄,HMODULE
.
从 DLL 加载图标
将 HMODULE
传递给 LoadIcon
或 LoadImage
以从资源加载图标。这些将产生 HICON
。将其分配给 TIcon
.
Handle
属性
将图标分配给表单
将您在上一步中获得的图标对象分配给表单的 Icon
属性。
非常感谢。我尝试了类似 Form.Icon.Assign(Icon); 的方法,但它创建了 AV 错误消息。这是工作代码:
procedure TformOptions.FormCreate(Sender: TObject);
var
lib: THandle;
icon: TIcon;
begin
icon := TIcon.Create;
lib := LoadLibrary('res.dll');
if lib > 0 then icon.Handle := LoadIcon(lib, 'ICON2');
if icon.Handle > 0 then Application.Icon.Assign(icon);
icon.Free;
FreeLibrary(lib);
end;