在Inno Setup安装过程中,按钮被裁剪,并且自定义消息以乱码显示(日语)

时间:2018-08-13 14:42:35

标签: inno-setup

在我的[run]部分中,此条目:

Filename: "{win}\hh.exe"; \
    Parameters: "{app}\MeetSchedAssist.chm::/msa-revision-history.htm"; \
    WorkingDir: "{app}"; \
    Flags: nowait postinstall runmaximized; \
    Description: "{cm:ViewChangeHistory}"

当我使用英语运行安装程序时,它看起来不错:

Results in English

用户刚刚录制了将视频安装在日语计算机上的视频:

Results in Japanese

有两个问题:

  1. GUI的按钮全部已裁剪
  2. “查看更改历史记录”自定义字符串为乱码

英语自定义消息文件(UTF-8编码)具有

English.ViewChangeHistory=View Change History

日语自定义消息文件(UTF-8编码)具有:

Japanese.ViewChangeHistory=変更履歴を表示

为什么显示不正确?我正在使用Inno Setup Unicode的最新版本。我知道用户正在使用Ultra HD监视器。

此外,我正在重新构建运行列表,如下所示:

type
  TRunEntry = record
    Caption: string;
    Checked: Boolean;
    Object: TObject;
  end;

procedure RebuildRunList;
var
  RunEntries: array of TRunEntry;
  I: Integer;
begin
  // Save run list ...
  SetArrayLength(RunEntries, WizardForm.RunList.Items.Count);
  for I := 0 to WizardForm.RunList.Items.Count - 1 do
  begin
    RunEntries[I].Caption := WizardForm.RunList.ItemCaption[I];
    RunEntries[I].Checked := WizardForm.RunList.Checked[I];
    RunEntries[I].Object := WizardForm.RunList.ItemObject[I];
  end;

  // ... clear it ... 
  WizardForm.RunList.Items.Clear;

  // ... and re-create 
  for I := 0 to GetArrayLength(RunEntries) - 1 do
  begin
    // the first three entries are radio buttons 
    if (I = 0) or (I = 1) or (I = 2) then
    begin
      WizardForm.RunList.AddRadioButton(
        RunEntries[I].Caption, '', 0, RunEntries[I].Checked, True, RunEntries[I].Object);
    end
      else
    begin
      WizardForm.RunList.AddCheckBox(
        RunEntries[I].Caption, '', 0, RunEntries[I].Checked, True, True, True,
        RunEntries[I].Object);
    end;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpFinished then
  begin
    // Only now is the RunList populated.
    // Two entries are on 64-bit systems only.
    if IsWin64 then RebuildRunList;
  end;
end;

更新

我注释掉了重建运行列表的代码,它在我的PC上没有任何影响:

Results 1

但是,蒙皮可以正常工作。因此,按钮位置问题必须与使用超高清配置和/或缩放文本的用户相关。

然后,我注释掉了外观代码,然后在PC上再次尝试。没有变化:

Results 2

我真的不明白为什么会这样!

更新

我加入了这样的自定义消息:

[CustomMessages]
#include AddBackslash(SourcePath) + ".\l.jpn\CustomMessagesJapanese.txt"

1 个答案:

答案 0 :(得分:1)

这取决于您添加文字的方式。

在带有MessagesFile的ISL文件中

根据http://www.jrsoftware.org/ishelp/topic_unicode.htm,在UTF-8中保存ISL文件是非法的。

您必须将其另存为ANSI编码,并使用文件中指定的代码页进行编码。

直接在您的ISS文件中或使用#include

或者,您也可以在本地[Messages]或[CustomMessages]部分中直接使用Language.Key值,直接在iss文件中使用UTF-8字符串,如下所示:

[CustomMessages]
English.ViewChangeHistory=View Change History
Japanese.ViewChangeHistory=変更履歴を表示

您还可以#include使用相同格式的外部文件。

在两种情况下(无论是直接在iss文件中还是在#included文件中),都需要确保使用BOM将文件保存为UTF-8。