如何最好地查找用户可用的所有系统字体,以便它们可以在下拉选择框中显示?
我还希望区分Unicode和非Unicode字体。
我正在使用完全支持Unicode的Delphi 2009,并希望得到一个Delphi解决方案。
如何最好地查找用户可用的所有系统字体,以便它们可以在下拉选择框中显示?
我还希望区分Unicode和非Unicode字体。
我正在使用完全支持Unicode的Delphi 2009,并希望得到一个Delphi解决方案。
Screen.Fonts
属性通过EnumFontFamiliesEx
API函数进行填充。在Forms.pas文件中可以找到调用该函数的例子。
回调函数会接收一个TNewTextMetricEx
记录,该记录的一个成员是TFontSignature
。其中的fsUsb
字段表示字体声称支持的Unicode子范围。
实际上系统并没有“Unicode字体”。即使那些名字中带有“Unicode”的字体,也并不具备所有Unicode字符的字形。你可以区分位图、打印机和TrueType字体,但除此之外,你能做的最好的就是确定你正在考虑的字体是否支持你需要的字符。如果该字体不符合你所认为的“Unicode字体”,但它支持你需要的所有字符,那又有什么区别呢?要获取这些信息,你可能会对GetFontUnicodeRanges
感兴趣。
用于根据不同字体所包含的字符来显示文本的微软技术是Uniscribe,尤其是字体回退。我不知道Delphi是否支持Uniscribe;我曾经开始编写一组导入单元来支持它,但我的兴趣很容易改变,在完成之前我就转而做其他事情了。Michael Kaplan的博客有时会谈到Uniscribe,那也是一个可以查找资料的地方。
Listbox1.Items.AddStrings(Screen.Fonts);