如何为从 Delphi DLL 加载的表单使用应用程序图标
How to use the application icon for forms loaded from Delphi DLL
我有多个 Windows 主机应用程序和一个 DLL,它们都是用 Delphi 创建的。 DLL 包含一些按需显示的(模态)对话框形式。我已经将 Forms.Application.Handle
从当前 运行 主机应用程序传递给 DLL 以获得正确的 windows 所有权。不幸的是,从 DLL 创建的对话框仍然显示通用图标,而不是像直接在主机应用程序中创建的对话框那样使用主应用程序图标。
如何让从 DLL 打开的基于 tForm
的对话框使用主机可执行文件中的当前应用程序图标而不是通用 Windows 图标?
显然,通过将 Forms.Application.Icon.Handle
句柄值传递给库并将其分配给那里的 tApplication 实例,可以将主机应用程序图标处理给 DLL。
虚拟库代码:
procedure MyLib_SetAppIcon( Icon : hIcon ); stdcall;
begin
if (Icon > 0) then
Forms.Application.Icon.Handle := Icon;
end;
虚拟主机代码:
procedure MyLib_SetAppIcon( Icon : hIcon ); stdcall; external 'MyLib.dll';
// ...
MyLib_SetAppIcon(Forms.Application.Icon.Handle);
// ...
我有多个 Windows 主机应用程序和一个 DLL,它们都是用 Delphi 创建的。 DLL 包含一些按需显示的(模态)对话框形式。我已经将 Forms.Application.Handle
从当前 运行 主机应用程序传递给 DLL 以获得正确的 windows 所有权。不幸的是,从 DLL 创建的对话框仍然显示通用图标,而不是像直接在主机应用程序中创建的对话框那样使用主应用程序图标。
如何让从 DLL 打开的基于 tForm
的对话框使用主机可执行文件中的当前应用程序图标而不是通用 Windows 图标?
显然,通过将 Forms.Application.Icon.Handle
句柄值传递给库并将其分配给那里的 tApplication 实例,可以将主机应用程序图标处理给 DLL。
虚拟库代码:
procedure MyLib_SetAppIcon( Icon : hIcon ); stdcall;
begin
if (Icon > 0) then
Forms.Application.Icon.Handle := Icon;
end;
虚拟主机代码:
procedure MyLib_SetAppIcon( Icon : hIcon ); stdcall; external 'MyLib.dll';
// ...
MyLib_SetAppIcon(Forms.Application.Icon.Handle);
// ...