我想知道为什么TFontDialog提供的字体少于Screen.Fonts? (例如,Arial *字体,漫画字体等在TFontDialog中不显示)
TFontDialog给出的字体列表似乎与写字板相同,而Screen.Fonts给出的字体列表与Word基本相同。
非常感谢您的见解!
PS: 德尔福XE, Windows 7
PS:相关的SO主题:
PS:相关网页:
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.
答案 0 :(得分:6)
Screen.Fonts
返回所有已安装的字体,包括 Registry \ HKCU \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Font Management \ Inactive Fonts 中管理的隐藏字体。 (Source)显然,TFontDialog
不显示这些隐藏字体。
此外,Screen.Fonts
的字体组合框中未提及TFontDialog
中列出的某些字体,但会添加到字体样式组合框。以 Arial 为例:字体样式列出了10个项目,这些项目似乎是字体 Arial , Arial Black 和的组合Arial Narrow 。
答案 1 :(得分:2)
不同的API,不同的结果。 Screen.Fonts
使用EnumFontFamiliesEx()
,它返回所有已安装的字体。 TFontDialog
使用ChooseFont()
代替TFontDialog.Font
,仅显示与TFontDialog.Options
和{{1}}属性兼容的字体。