我正在使用其他字体(Abilene)构建跨平台桌面应用。在启动时我检查是安装的字体,如果不是,我安装并使用它。对于Mac,一切似乎都很好,但Windows版本(和IDE !!)不能正确显示字体。这是字体安装过程:
procedure InstallFont;
const
REG_NT = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts';
var
Reg: TRegistry;
res: Boolean;
installName,FileName: UnicodeString;
begin
Reg := TRegistry.Create(KEY_ALL_ACCESS);
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
res := Reg.OpenKey(REG_NT, False);
if not Res then Exit;
installName := 'Abilene Regular (TrueType)';
FileName:=ExtractFilePath(ParamCount(0)+'\Abilene.ttf';
Reg.WriteString(installName, FileName);
Reg.CloseKey;
finally
Reg.Free;
end;
AddFontResourceW(PWideChar(FileName));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE,0,0);
end;
安装字体后,它在“控制”面板中显示为快捷方式,但所有其他程序都可以使用它。即使是Delphi,也可以使用VCL,而不是FMX应用程序(参见附图)。我已经从IDE附加了图片。在运行时它是一样的。
对于字体安装,特别是对于FMX应用程序,是否还有其他必须做的事情?或者这只是一个必须向Embarcaderro QC报告的错误?
编辑:添加一些细节:如果我通过下载来安装字体,请单击鼠标右键并选择“安装”字样。一切都好。如果我通过我的proc安装它,那么除了Delphi FMX之外,该字体是可见的并且可用于整个世界。 Delphi VCL也可以使用它。为了测试这个,我在我的%APPDATA%文件夹中安装了带有proc的字体。 Word,Excel,Delphi VCL都可以使用它。德尔福FMX不能。
Edit2:添加了SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0)。没有变化。
Edit3:在“字体”对话框中,字体显示正确(图3)
答案 0 :(得分:0)
显然这是某种错误,因为我找到了一个解决方法:如果我先将字体复制到%windir%\ Fonts文件夹,那么一切正常。即使我创建了\ windows \ fonts文件夹的子文件夹并复制其中的字体一切也很好。
为什么Firemonkey不想在该文件夹外显示我不知道的字体。而且,正如我所说,这仅适用于Windows。 Mac OS没问题(我使用〜/ Library / Fonts)。