是否可以直接从Delphi中的资源使用字体以及如何使用?
我遇到了第一步的问题。例如我不能在项目资源中包含Segoe UI Light字体,会发生异常。仅当文件的扩展名为'ttf'时才会出现。
如果上面写的不可能,那么如何在不单独部署字体(可执行文件)的情况下使用外部字体?
提前致谢!
答案 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。
所以你需要一个字体文件。但我们也可以伪造它。
使用JVCL的TjvDataEmbedded
将TTF文件包含在您的可执行文件中。嵌入字体文件是直接的。 (右键单击,'从文件加载'...)。
在运行时,将文件解压缩到用户的临时目录中(参见TjvDataEmbedded方法 - 我现在不知道,但它应该类似于SaveToFile或类似的东西)。顺便说一句,你可以在任何你喜欢的目录中提取它。点击AddFontResource
就可以了。
另外,根据您的要求,您可以在内存映射的文件和/或RAM驱动器中提取文件。
HTH