有个道理已经有人提醒了楼主,这里就不再重复。这个道理就是:不要为了让你那个安装程序的界面使用某种字体,就强行在用户的系统上也安装该字体!大多数人是反感这种做法的,比如我。
比较好的做法是:用户只是在运行安装程序时,临时添加该字体资源,一旦安装程序结束,一切恢复原状。下面的代码供参考。
- #ifdef UNICODE
- #define A "W"
- #else
- #define A "A"
- #endif
- [Setup]
- AppName=My Program
- AppVersion=1.5
- DefaultDirName={pf}\My Program
- [Files]
- // 打包临时字体文件 ,这里以微软雅黑为例
- Source: "msyh.ttf"; Flags: dontcopy
- [Code]
- const
- FR_PRIVATE = $10;
- FR_NOT_ENUM = $20;
- var
- FontFlags: DWORD;
- function AddFontResourceEx(lpszFilename: string; fl: DWORD; pdv: Cardinal): Integer;
- external 'AddFontResourceEx{#A}@gdi32.dll stdcall';
- function RemoveFontResourceEx(lpFileName: string; fl: DWORD; pdv: Cardinal): BOOL;
- external 'RemoveFontResourceEx{#A}@gdi32.dll stdcall';
- procedure InitializeWizard;
- var
- tmpFontName: string;
- tmpFontSize: integer;
- begin
- ExtractTemporaryFile('msyh.ttf'); // 释放临时字体文件
- FontFlags:= FR_PRIVATE or FR_NOT_ENUM;
- if AddFontResourceEx(ExpandConstant('{tmp}\msyh.ttf'), FontFlags, 0) <> 0 then // 添加临时字体资源
- begin
- tmpFontName:= '微软雅黑'; // 临时字体的名称,注意不要写错。就是双击字体文件时显示的名称。
- tmpFontSize:= 8; // 选择你想要的字体大小
- WizardForm.Font.Name:= tmpFontName; // 把安装向导换成临时字体
- WizardForm.Font.Size:= tmpFontSize; // 把安装向导换成临时字体大小,以此类推,具体那个地方的字体大小要更改,你自己去决定吧
- WizardForm.WelcomeLabel1.Font.Name:= tmpFontName;
- WizardForm.WelcomeLabel1.Font.Size:= tmpFontSize;
- WizardForm.PageNameLabel.Font.Name:= tmpFontName;
- WizardForm.PageNameLabel.Font.Size:= tmpFontSize;
- WizardForm.FinishedHeadingLabel.Font.Name:= tmpFontName;
- WizardForm.FinishedHeadingLabel.Font.Size:= tmpFontSize;
- end;
- end;
- procedure DeinitializeSetup;
- begin
- RemoveFontResourceEx(ExpandConstant('{tmp}\msyh.ttf'), FontFlags, 0); //删除临时字体资源
- end;