找到用户可用的所有系统字体的最佳方法是什么,以便它们可以显示在下拉选择框中?
我还想区分Unicode和非Unicode字体.
我正在使用完全支持Unicode的Delphi 2009,并且想要一个Delphi解决方案.
该Screen.Fonts
属性通过EnumFontFamiliesEx
API函数填充.查看Forms.pas以获取调用该函数的示例.
它调用的回调函数将接收一条TNewTextMetricEx
记录,该记录的一个成员是a TFontSignature
.该fsUsb
字段指示字体声称支持哪些Unicode子范围.
系统实际上没有"Unicode字体".即使名称中包含Unicode一词的字体也没有所有 Unicode字符的字形.您可以区分位图,打印机和TrueType字体,但除此之外,您可以做的最好的方法是确定您考虑的字体是否支持您想要的字符.如果字体不是您认为的"Unicode字体",但它支持您需要的所有字符,那么它有什么区别?要获得此信息,您可能会感兴趣GetFontUnicodeRanges
.
Microsoft技术用于显示具有不同字体的文本,基于哪些字体包含哪些字符是Uniscribe,尤其是字体回退.我不知道任何德尔福对Uniscribe的支持; 我开始为它编写一套导入单元,但我的兴趣是变幻无常的,在我完成之前我又转向了其他东西.Michael Kaplan的博客有时会谈论Uniscribe,所以这是另一个值得关注的地方.
我可以回答你的一半问题,你可以从全局Screen对象中获取当前环境可以访问的字体列表作为字符串列表
即
Listbox1.Items.AddStrings(Screen.Fonts);