我想在安装开始之前安装一些字体,可以吗?
要将字体注册为某个过程(在您的情况下为设置)供私人使用,可以使用AddFontResourceEx
带有参数中FR_PRIVATE
指定标志的Windows API函数fl
。它将允许您仅将字体用于过程。在下面的示例脚本中,如何将字体提取到临时文件夹中,如何注册字体以供设置过程专用,以及如何将其加载到向导表单控件中:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Files]
Source: "MyFont.ttf"; Flags: dontcopy
[Code]
#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif
const
FR_PRIVATE = $10;
FR_NOT_ENUM = $20;
function AddFontResourceEx(lpszFilename: string;
fl: DWORD; pdv: Cardinal): Integer;
external 'AddFontResourceEx{#AW}@gdi32.dll stdcall';
function RemoveFontResourceEx(lpFileName: string;
fl: DWORD; pdv: Cardinal): BOOL;
external 'RemoveFontResourceEx{#AW}@gdi32.dll stdcall';
var
FontFlags: DWORD;
[Code]
procedure InitializeWizard;
var
FontName: string;
begin
// extract the font file to the temporary folder
ExtractTemporaryFile('MyFont.ttf');
// this combination specifies the reservation of this font for use
// in the setup process and that this font cannot be enumerated
FontFlags := FR_PRIVATE or FR_NOT_ENUM;
// add the font resource
if AddFontResourceEx(ExpandConstant('{tmp}\MyFont.ttf'),
FontFlags, 0) <> 0 then
begin
// note, that this is the name of the font, which doesn't have
// to match to the font file name
FontName := 'My Font Name';
// the global setting of the WizardForm.Font property causes many
// of its child controls to inherit this font; except those listed
// below; their default font has changed and they lost the ability
// to inherit the font from their parent so we must do it manually
WizardForm.Font.Name := FontName;
WizardForm.WelcomeLabel1.Font.Name := FontName;
WizardForm.PageNameLabel.Font.Name := FontName;
WizardForm.FinishedHeadingLabel.Font.Name := FontName;
end;
end;
procedure DeinitializeSetup;
begin
// remove the font resource
RemoveFontResourceEx(ExpandConstant('{tmp}\MyFont.ttf'),
FontFlags, 0);
end;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句