【问题标题】:Embedding a font in delphi在delphi中嵌入字体
【发布时间】:2011-02-28 09:27:05
【问题描述】:

我正在开发一个应用程序,该应用程序需要特定的条形码 True Type 字体,而该字体不太可能出现在用户的 PC 上。

我可以以某种方式将字体嵌入到应用程序中,还是需要使用安装程序来安装字体?

【问题讨论】:

标签: delphi fonts embedded-resource


【解决方案1】:

是的,您可以将其作为资源保存在 EXE 文件中,在用户的 PC 上,您可以使用 TResourceStream 实例将其提取为文件。然后你可以调用AddFontResource API 函数。最后,您应该向系统中的所有顶级窗口发送一条 WM_FONTCHANGE 消息(检查 MSDN 网站中 AddFontResource 描述的 Remark 部分)。

如果您需要示例代码,请告诉我。

【讨论】:

  • 请注意,如果您没有此字体的再分发权,您可能会违反某些版权法或许可限制。
【解决方案2】:

在我看来,最简单的方法是使用AddFontMemResourceEx,以防字体作为资源嵌入到 EXE 中。它允许直接从内存中加载字体,无需将字体保存到文件中。

代码示例:

function LoadResourceFont( const ResourceName : string ) : boolean;
var
   ResStream : tResourceStream;
   FontsCount : integer;
   hFont : tHandle;
begin
   ResStream := tResourceStream.Create(hInstance, ResourceName, RT_RCDATA);
   hFont := AddFontMemResourceEx(ResStream.Memory, ResStream.Size, nil, @FontsCount);
   result := (hFont <> 0);
   ResStream.Free();
end;

【讨论】:

  • 不错。对我来说,代码是“ ResStream := tResourceStream.Create(hInstance, ResourceName, RT_FONT);”而不是 RT_RCDATA。我将 FontAwesome 拖到“Melander 资源编辑器”中,它创建了一个 FONT typer 资源
猜你喜欢
  • 2013-03-17
  • 2023-04-04
  • 2011-05-28
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 2015-02-16
相关资源
最近更新 更多