【发布时间】:2010-02-21 08:41:35
【问题描述】:
是否可以直接从 Delphi 的资源中使用字体以及如何使用?
我在最初的步骤中遇到了问题。例如,我不能在项目的资源中包含 Segoe UI Light 字体,会发生异常。只有当文件的扩展名是“ttf”时。
如果上面写的不可能,那么我如何使用外部字体而不单独部署字体(从可执行文件中)?
提前致谢!
【问题讨论】:
标签: delphi fonts resources delphi-2009
是否可以直接从 Delphi 的资源中使用字体以及如何使用?
我在最初的步骤中遇到了问题。例如,我不能在项目的资源中包含 Segoe UI Light 字体,会发生异常。只有当文件的扩展名是“ttf”时。
如果上面写的不可能,那么我如何使用外部字体而不单独部署字体(从可执行文件中)?
提前致谢!
【问题讨论】:
标签: delphi fonts resources delphi-2009
在 Windows 2000 及更高版本上,您可以使用 AddFontMemResourceEx 从内存中为您的进程安装字体。
【讨论】:
如果要使用字体,则必须安装该字体。
但是您可以使用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。
所以你需要一个字体文件。但我们也可以假装。
使用JVCL 的TjvDataEmbedded 将您的TTF 文件包含在您的可执行文件中。嵌入字体文件很简单。 (右键单击,“从文件加载”...)。
在运行时,将您的文件提取到用户的临时目录中(请参阅 TjvDataEmbedded 方法 - 我现在不知道,但它应该类似于 SaveToFile 或类似的东西)。顺便说一句,您可以将其提取到您喜欢的任何其他目录中。拨打AddFontResource就可以了。
此外,根据您的要求,您可以将文件提取到内存映射和/或 RAM 驱动器中。
HTH
【讨论】:
ParentFont:=True
WM_FONTCHANGE。我该如何使用它?