【问题标题】:How to set FireMonkey form icon runtime in Delphi 10.2如何在 Delphi 10.2 中设置 FireMonkey 表单图标运行时
【发布时间】:2017-06-06 08:22:25
【问题描述】:

我正在使用带有 Delphi 10.2 Tokyo 的 Firemonkey 框架为 Windows 和 OS X 创建一个应用程序,并且无法动态设置应用程序或表单图标。

在 VCL 项目中我使用了以下代码:

Form1.Icon.LoadFromFile()

Application.Icon.LoadFromFile()

但是 FMX 中没有这样的属性或方法。除了在 Project -> Options 菜单中,还有什么方法可以设置项目图标?

【问题讨论】:

    标签: delphi firemonkey


    【解决方案1】:

    添加到您的使用列表{$IFDEF WIN32}WinApi.Windows,FMX.Platform.Win,{$ENDIF}

    procedure setFormIcon(Form: TForm; FileName: String);
      var Icon : NativeUInt;
    begin
      {$IFDEF WIN32}
      ICON := LoadImage(0,PWideChar(Filename),IMAGE_ICON,0,0,LR_LOADFROMFILE OR LR_DEFAULTSIZE OR LR_SHARED);
      SetClassLong(FmxHandleToHWND(Form.Handle), GCL_HICON, icon);
      {$ENDIF}
    end;
    
    procedure TForm1.btn1Click(Sender: TObject);
    begin
      setFormIcon(Form1,'my icon path.ico');
    end;
    

    【讨论】:

    • 好的。 OS X 怎么样?
    • 而这个过程只设置了表单图标。有没有办法设置应用程序图标?
    【解决方案2】:

    在 10.2 Rio 的源代码中,我看到 function TPlatformWin.CreateWindow 用于在 Windows 中创建一个窗口,只有这一行来提供一个窗口的图标:

    WindowClass.hIcon := LoadIconW(MainInstance, PChar('MAINICON'));

    function TPlatformWin.CreateAppHandle 有一个完全相同的代码!所以,我们没有直接的方式通过 FireMonkey 组件设置应用或表单图标。

    在 Windows 下你仍然可以使用 WinAPI 消息WM_SETICON (SendMessage(Handle, WM_SETICON, ICON_BIG, MyIconHandle);),但我没有尝试过,不知道这样有什么麻烦。

    同样在 Windows 中,我们可以使用 TTaskbarBaseTPreviewClipRegion 类来实现更精确和更实用的任务栏交互方式。

    附:我不知道,我们对 OS X 的相同要求有什么要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 2023-03-21
      • 2016-12-11
      • 2021-12-06
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      相关资源
      最近更新 更多