在Delphi中嵌入字体

15

我正在开发一个需要特定条形码字体的应用程序,这种字体不太可能在用户的个人电脑上找到。

我能否将字体嵌入到应用程序中,或者需要使用安装程序来安装字体?


5
你可以两者兼顾。我有一个问题,这是你的字体吗?还是说你可以再分发? - Cesar Romero
1
您可以将其嵌入为资源。另请参阅https://dev59.com/anE95IYBdhLWcg3wdtmj - Ondrej Kelle
2个回答

14

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

代码示例:

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;

1
很好。对我来说,代码是“ResStream:= tResourceStream.Create(hInstance,ResourceName,RT_FONT);”而不是RT_RCDATA。我将FontAwesome拖入了“Melander资源编辑器”,它创建了一个FONT类型的资源。 - Giorgio Calzolato

8
是的,你可以将它作为资源保存在EXE文件中,在用户的电脑上,你可以使用TResourceStream实例将其提取为文件。然后,你可以调用AddFontResource API函数。最后,你应该向系统中的所有顶级窗口发送WM_FONTCHANGE消息(请查看MSDN网站上AddFontResource描述的备注部分)。
如果你需要示例代码,请告诉我。

2
请注意,如果您没有此字体的再分发权,则可能会违反某些版权法或许可证限制。 - Warren P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接