【发布时间】:2014-07-22 07:56:05
【问题描述】:
我正在构建带有附加字体 (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 都可以使用。 Delphi FMX 不能。
Edit2:添加了 SendMessage(HWND_BROADCAST, WM_FONTCHANGE,0,0)。没有变化。
Edit3:在“字体”对话框中,字体显示正确(图 3)
【问题讨论】:
-
这对我来说似乎全错了。您将强制您的应用程序在每次运行时向用户显示 UAC 对话框,以便它可以只安装一次字体?将字体安装到您的安装程序中。至于FMX的具体问题,我认为这与安装无关吗?即使您在程序之外手动安装它,您是说 FMX 无法正确显示它?还是只有从程序中安装字体时才会出现问题?
-
我首先检查是否安装了字体,即如果注册表中存在密钥 Abilene Regular (TrueType),则跳过该过程。
-
如果我从向导安装字体并且从不检查它,用户可以从控制面板卸载它
-
同样,每次运行程序时,您都会将 UAC 对话框强制发送给您的用户。你没有回答我提出的任何问题。
-
@LHristov 没有人将安装程序写入程序。如果用户从你的程序中删除了一个重要的组件,那是他们的错。用户只需进行修复安装即可修复它。听起来你需要换个新老板。
标签: windows delphi firemonkey delphi-xe4