如何为从 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);
// ...