如何使用外部字体?

发布于 2024-08-22 04:11:55 字数 188 浏览 2 评论 0原文

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

我在最初的步骤中遇到了问题。例如,我无法在项目资源中包含 Segoe UI Light 字体,会发生异常。而且只有当文件扩展名是“ttf”时才会出现这种情况。

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

提前致谢!

Is it possible to use a font directly from resources in Delphi and how?

I have a problem with the very first steps.Example I cannot include Segoe UI Light font in resources of a project,an exception occurs.And that is only if the file's extension is 'ttf'.

If the written above is not possible then how do I use an external font without deploying the font separately(from executable)?

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

深陷 2024-08-29 04:11:55

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

On Windows 2000 and later, you can use AddFontMemResourceEx to install fonts for your process from memory.

迷乱花海 2024-08-29 04:11:55

如果您想使用某种字体,则必须安装该字体。
但是您可以使用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 驱动器中。

华泰

If you want to use a font the font must be installed.
But you can fake this, by using 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;

As you see the AddFontResource needs a file name. The same stands for AddFontResourceEx.

So you need a font file. But we can also fake that.

Use JVCL's TjvDataEmbedded to include your TTF file in your executable. To embed the font file is straightforard. (Right-Click, 'Load from File'...).

At runtime, extract your file in user's temporary directory (see TjvDataEmbedded methods - I don't know now, but it should be something like SaveToFile or similar). Btw you can extract it in any other directory you like. Call AddFontResource on it.

Also, according to your requirements, you can extract the file in a memory mapped one and/or in a RAM drive.

HTH

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文