如何在Delphi 10.2中设置FireMonkey表单图标运行时

时间:2017-06-06 08:22:25

标签: delphi firemonkey

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

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

Form1.Icon.LoadFromFile()

Application.Icon.LoadFromFile()

但FMX中没有这样的属性或方法。有没有办法设置项目图标,而不是项目 - >选项菜单?

2 个答案:

答案 0 :(得分:0)

添加到您的使用列表{$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;

答案 1 :(得分:0)

在10.2 Rio的源代码中,我看到用于在Windows中创建窗口的function TPlatformWin.CreateWindow仅具有以下行来提供窗口图标:

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

function TPlatformWin.CreateAppHandle的代码完全相同!因此,我们没有直接方法通过FireMonkey组件设置应用程序或表单图标。

在Windows上,您仍然可以使用WinAPI消息WM_SETICONSendMessage(Handle, WM_SETICON, ICON_BIG, MyIconHandle);),但是我没有尝试过,也不知道这种方式有什么麻烦。

在Windows中,我们也可以使用TTaskbarBaseTPreviewClipRegion类来实现TaskBar交互的更精确和功能性的方式。

P.S。我不知道,对于OS X,我们有什么相同的要求。