如何使用外部字体?

时间:2010-02-21 08:41:36

标签: delphi fonts resources delphi-2009

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

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

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

提前致谢!

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分: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;

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

所以你需要一个字体文件。但我们也可以伪造它。

使用JVCLTjvDataEmbedded将TTF文件包含在您的可执行文件中。嵌入字体文件是直接的。 (右键单击,'从文件加载'...)。

在运行时,将文件解压缩到用户的临时目录中(参见TjvDataEmbedded方法 - 我现在不知道,但它应该类似于SaveToFile或类似的东西)。顺便说一句,你可以在任何你喜欢的目录中提取它。点击AddFontResource就可以了。

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

HTH