如何在Delphi中直接使用资源中的字体?
我在第一步就遇到了问题,例如我无法将Segoe UI Light字体包含在项目资源中,会出现异常。这仅适用于文件扩展名为“ttf”的情况。
如果以上操作不可行,则如何在不单独部署字体(从可执行文件中)的情况下使用外部字体?
提前致谢!
如何在Delphi中直接使用资源中的字体?
我在第一步就遇到了问题,例如我无法将Segoe UI Light字体包含在项目资源中,会出现异常。这仅适用于文件扩展名为“ttf”的情况。
如果以上操作不可行,则如何在不单独部署字体(从可执行文件中)的情况下使用外部字体?
提前致谢!
如果您想使用字体,那么必须安装该字体。但是您可以通过使用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也是一样的。
所以你需要一个字体文件。但我们也可以虚假(fake)这个文件。
使用 JVCL 的 TjvDataEmbedded
将 TTF 文件嵌入到可执行文件中。嵌入字体文件很简单。(右键单击,“从文件加载”...)。
运行时,在用户的临时目录中提取您的文件(查看 TjvDataEmbedded 方法 - 我不知道现在是什么,但应该是类似于 SaveToFile 的东西)。顺便说一下,您可以将其提取到任何其他目录中。调用 AddFontResource
。
还可以根据您的要求,在内存映射文件或 RAM 驱动器中提取该文件。
希望对您有所帮助。
在Windows 2000及以上版本中,您可以使用AddFontMemResourceEx从内存安装字体到您的进程中。
myMainForm.Font.Name:='My Times New Roman'; myMainForm.Font.Size:=10; //等等
另外,请确保您表单的所有控件都具有ParentFont:= True
。 - John ThomasWM_FONTCHANGE
。我该如何使用它? - sma6871