如何使用外部字体?

Iva*_*nov 12 delphi resources fonts delphi-2009

是否可以直接从Delphi中的资源使用字体以及如何使用?

我的第一步有问题.例如我不能在项目资源中包含Segoe UI Light字体,会发生异常.只有当文件的扩展名为'ttf'时才会出现异常.

如果上面写的不可能,那么如何在不单独部署字体(来自可执行文件)的情况下使用外部字体?

提前致谢!

Ond*_*lle 13

在Windows 2000及更高版本中,您可以使用AddFontMemResourceEx从内存中为进程安装字体.


Joh*_*mas 12

如果要使用字体,则必须安装字体.但你可以通过使用伪造这个AddFontResource.

procedure TForm1.FormCreate(Sender: TObject) ;
begin
  AddFontResource('c:\FONTS\MyFont.TTF') ;
  SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
end;

//Before application terminates we must remove our font:
procedure TForm1.FormDestroy(Sender: TObject) ;
begin
  RemoveFontResource('C:\FONTS\MyFont.TTF') ;
  SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
end;
Run Code Online (Sandbox Code Playgroud)

如您所见,AddFontResource需要一个文件名.同样代表AddFontResourceEx.

所以你需要一个字体文件.但我们也可以假装.

使用JVCLTjvDataEmbedded,包括你的可执行的TTF文件.嵌入字体文件是直接的.(右键单击,'从文件加载'...).

在运行时,在用户的临时目录中提取您的文件(请参阅TjvDataEmbedded方法 - 我现在不知道,但它应该类似于SaveToFile或类似的东西).顺便说一句,你可以在任何你喜欢的目录中提取它.打电话AddFontResource给它.

此外,根据您的要求,您可以在映射的内存和/或RAM驱动器中提取文件.

HTH

  • @John:就技术方面而言,这是好的 - 但是你需要**以确保你拥有该字体的再分配权利. (2认同)