为什么TFontDialog比Screen.Fonts提供更less的字体?

我想知道为什么TFontDialog比Screen.Fonts提供更less的字体? (例如,Arial *字体,漫画字体等,不显示在TFontDialog中)

也似乎TFontDialog给出的字体列表与WordPad相同,而Screen.Fonts给出的字体列表基本上与Word相同。

非常感谢您的见解!

PS:Delphi XE,Windows 7

PS:相关的SO主题:

  1. 枚举EnumFontFamiliesEx函数时字体太多
  2. 使用Delphi查找系统字体
  3. 如何使用外部字体?

PS:相关网页:

  1. TFontDialog显示所有字体@ borland.newsgroups.archived
  2. TFontDialog显示所有字体@ delphigroups

sys app

unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) lst1: TListBox; dlgFont1: TFontDialog; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.FormCreate(Sender: TObject); begin lst1.Items.AddStrings(Screen.Fonts); end; procedure TForm2.Button1Click(Sender: TObject); begin dlgFont1.Device := fdBoth; if dlgFont1.Execute then begin end; end; end. 

Solutions Collecting From Web of "为什么TFontDialog比Screen.Fonts提供更less的字体?"

Screen.Fonts返回所有已安装的字体,包括在Registry \ HKCU \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Font Management \ Inactive Fonts中管理的隐藏字体 。 ( Source )显然, TFontDialog不显示这些隐藏的字体。

此外,在Screen.Fonts字体组合框中没有提到Screen.Fonts中列出的一些字体,但将添加到字体样式组合框。 以Arial为例:字体样式列出了10个项目,这似乎是字体ArialArial BlackArial Narrow的组合

不同的API,不同的结果。 Screen.Fonts使用EnumFontFamiliesEx() ,它返回所有安装的字体。 TFontDialog使用ChooseFont()来代替,它只显示与TFontDialog.FontTFontDialog.Options属性兼容的字体。