4

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

看来TFontDialog给出的字体列表和WordPad一样,而Screen.Fonts给出的字体列表和Word基本一样。

非常感谢您的见解!

PS:德尔福XE,Windows 7

PS:相关的SO主题:

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

PS:相关网页:

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

系统 应用程序

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.    
4

2 回答 2

6

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

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

于 2012-07-03T01:00:17.727 回答
2

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

于 2012-07-02T20:43:09.943 回答