【发布时间】:2015-07-10 21:44:52
【问题描述】:
我有主要的 .exe 应用程序和带有表单的 .dll。从 .exe 我可以从 .dll 创建和显示表单,但它没有任务栏图标(以及左上角的小图标)。我想从另一个 DLL 加载这个图标。请问我该怎么做?
【问题讨论】:
我有主要的 .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;
【讨论】: