在firemonkey安装字体(Install font in firemonkey)

2019-08-22 16:03发布

我怎样才能使用嵌入字体或在我firemonkey应用程序安装新字体?

我想这个解决方案 ,但WM_FONTCHANGE不FMX定义!

我想使用自定义字体在我的申请,我可怎么办呢?

Answer 1:

我跟着指示在这里,他们是有一定的帮助。 我有一些额外的提示,可以帮助,

  • 这两个包裹,你将需要进行这项工作是WinAPI.Windows和WinAPI.Messages。
  • 如果你把这些包裹在你的“使用”条款一开始,你就不可能有命名冲突之类的东西TBitmap。

现在,我已经加入以下代码,

procedure TMainForm.FormCreate(Sender: TObject);
begin
  AddFontResource('c:\fontpath\myfont.ttf');
  SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  RemoveFontResource('c:\fontpath\myfont.ttf');
  SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
end;

当我在firemonkey形式运行此,我观察到以下。

  1. 代码运行
  2. 其他应用程序(如记事本,办公室)可以突然看到新字体
  3. 文字在我的应用程序不承认新的Font对象
  4. 如果我的名字动态的字体名称我的文字对象,它仍然不会改变。
  5. 如果我的名字动态与另一个明显的字体我的文字对象,它的变化。
  6. 如果我关闭了我的申请表和其它应用程序停止看到新字体。

这告诉我,我的代码工作(见子弹1和6) - 但如果你使用记事本中显示的名称FMX不会承认我的主窗体上的字体。 我已经四检查的字体名称。

我创建了两个相同的项目。 一个是VCL,另一个是FMX。 该项目VCL完美的作品 - 无论是静态文本和动态文本。 该FMX代码适用于没有。 如果让我猜的话,我会说,FMX是建立在启动时字体列表,并核对该列表可用字体(即像高速缓存)的列表。 我斗胆这么做是抽象FMX从底层操作系统的猜测...

如果有人已根据firemonkey这项工作中,我将不胜感激任何意见。 此外,如果有人知道如何实现在Mac下的同一个目标,我会很感激的指针了。

问候,

埃德先生。



Answer 2:

你肯定可以使用Winapi.Messages单元在您的FMX应用程序,它显然是针对Windows,消息不断被定义在那里。

如果你不希望使用Winapi.Messages ,只是定义常量在自己的代码:

const
  WM_FONTCHANGE = $001D;


文章来源: Install font in firemonkey