【问题标题】:Delphi - Change taskbar iconDelphi - 更改任务栏图标
【发布时间】:2015-07-10 21:44:52
【问题描述】:

我有主要的 .exe 应用程序和带有表单的 .dll。从 .exe 我可以从 .dll 创建和显示表单,但它没有任务栏图标(以及左​​上角的小图标)。我想从另一个 DLL 加载这个图标。请问我该怎么做?

【问题讨论】:

    标签: delphi dll icons


    【解决方案1】:

    这是您需要做的事情。我没有包含太多细节,因为你的问题没有什么细节,而且我无法确切知道你将如何将所有这些融入你的程序。重点是在高层次上明确您需要做什么。

    加载包含资源的 DLL

    使用LoadLibraryLoadLibraryEx 执行此操作。如果您需要调用 DLL 中的代码,请使用前者。否则使用后者传递LOAD_LIBRARY_AS_IMAGE_RESOURCE。这两个函数都会产生一个模块句柄,HMODULE

    从 DLL 加载图标

    HMODULE 传递给LoadIconLoadImage 以从资源中加载图标。这些将产生HICON。将其分配给TIcon 实例的Handle 属性。

    将图标分配给表单

    将您在上一步中获得的图标对象分配给表单的Icon 属性。

    【讨论】:

      【解决方案2】:

      非常感谢。我尝试了 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;
      

      【讨论】:

      • AV 将是因为您的代码中的错误。可能的表格无效。检验不等于零而不是大于。使用 LoadLibraryEx 避免在 dll 中执行代码。最后使用尝试。对 Icon 的简单赋值比 Assign 更惯用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 2012-12-20
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      相关资源
      最近更新 更多