论坛风格切换切换到宽版
  • 2573阅读
  • 4回复

请教版主关于inno自定义界面加载字体的问题 [复制链接]

上一主题 下一主题
离线lxd198717
 

发帖
156
金钱
1520
威望
203
只看楼主 倒序阅读 0 发表于: 2015-09-25
我试过了A版和U版inno,发现无法加载自定义的字体,会默认显示宋体,网上没有看到相关的教程,求指导,谢谢
本帖提到的人: @gnatix @restools
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 1 发表于: 2015-09-25
http://bbs.hanzify.org/read-htm-tid-96260.html

楼主还在弄这个?

确实在 Win 7 及以上系统微软雅黑要好看一些,这次要弄自定义字体了
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 2 发表于: 2015-09-25
有个道理已经有人提醒了楼主,这里就不再重复。这个道理就是:不要为了让你那个安装程序的界面使用某种字体,就强行在用户的系统上也安装该字体!大多数人是反感这种做法的,比如我。

比较好的做法是:用户只是在运行安装程序时,临时添加该字体资源,一旦安装程序结束,一切恢复原状。下面的代码供参考。

  1. #ifdef UNICODE
  2.   #define A "W"
  3. #else
  4.   #define A "A"
  5. #endif
  6. [Setup]
  7. AppName=My Program
  8. AppVersion=1.5
  9. DefaultDirName={pf}\My Program
  10. [Files]
  11. // 打包临时字体文件 ,这里以微软雅黑为例
  12. Source: "msyh.ttf"; Flags: dontcopy
  13. [Code]
  14. const
  15.   FR_PRIVATE = $10;
  16.   FR_NOT_ENUM = $20;
  17. var
  18.   FontFlags: DWORD;
  19. function AddFontResourceEx(lpszFilename: string; fl: DWORD; pdv: Cardinal): Integer;
  20.   external 'AddFontResourceEx{#A}@gdi32.dll stdcall';
  21. function RemoveFontResourceEx(lpFileName: string; fl: DWORD; pdv: Cardinal): BOOL;
  22.   external 'RemoveFontResourceEx{#A}@gdi32.dll stdcall';
  23. procedure InitializeWizard;
  24. var
  25.   tmpFontName: string;
  26.   tmpFontSize: integer;
  27. begin
  28.   ExtractTemporaryFile('msyh.ttf');            // 释放临时字体文件
  29.   FontFlags:= FR_PRIVATE or FR_NOT_ENUM;
  30.   if AddFontResourceEx(ExpandConstant('{tmp}\msyh.ttf'), FontFlags, 0) <> 0 then     // 添加临时字体资源
  31.     begin
  32.       tmpFontName:= '微软雅黑';                  // 临时字体的名称,注意不要写错。就是双击字体文件时显示的名称。
  33.       tmpFontSize:= 8;                           // 选择你想要的字体大小
  34.       WizardForm.Font.Name:= tmpFontName;        // 把安装向导换成临时字体
  35.       WizardForm.Font.Size:= tmpFontSize;        // 把安装向导换成临时字体大小,以此类推,具体那个地方的字体大小要更改,你自己去决定吧
  36.       WizardForm.WelcomeLabel1.Font.Name:= tmpFontName;
  37.       WizardForm.WelcomeLabel1.Font.Size:= tmpFontSize;
  38.       WizardForm.PageNameLabel.Font.Name:= tmpFontName;
  39.       WizardForm.PageNameLabel.Font.Size:= tmpFontSize;
  40.       WizardForm.FinishedHeadingLabel.Font.Name:= tmpFontName;
  41.       WizardForm.FinishedHeadingLabel.Font.Size:= tmpFontSize;
  42.   end;
  43. end;
  44. procedure DeinitializeSetup;
  45. begin
  46.   RemoveFontResourceEx(ExpandConstant('{tmp}\msyh.ttf'), FontFlags, 0);  //删除临时字体资源
  47. end;


离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 3 发表于: 2015-09-25
随便找了一个字体文件试了一下,效果是这样:


离线lxd198717

发帖
156
金钱
1520
威望
203
只看该作者 4 发表于: 2015-09-29
谢谢版主,之前看了很多国外的脚本,都没有这么详细介绍字体替换的,祝版主长假玩的开心!