Inno setup Inno安装程序上的按钮被裁剪,一条自定义消息以乱码形式显示(日语)
在我的Inno setup Inno安装程序上的按钮被裁剪,一条自定义消息以乱码形式显示(日语),inno-setup,Inno Setup,在我的[run]部分中,我有以下条目: Filename: "{win}\hh.exe"; \ Parameters: "{app}\MeetSchedAssist.chm::/msa-revision-history.htm"; \ WorkingDir: "{app}"; \ Flags: nowait postinstall runmaximized; \ Description: "{cm:ViewChangeHistory}" 当我用英语运行安装程序时
[run]
部分中,我有以下条目:
Filename: "{win}\hh.exe"; \
Parameters: "{app}\MeetSchedAssist.chm::/msa-revision-history.htm"; \
WorkingDir: "{app}"; \
Flags: nowait postinstall runmaximized; \
Description: "{cm:ViewChangeHistory}"
当我用英语运行安装程序时,它看起来很好:
用户刚刚录制了一段视频,将其安装在日本计算机上:
有两个问题:
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;
[CustomMessages]
#include AddBackslash(SourcePath) + ".\l.jpn\CustomMessagesJapanese.txt"
使现代化
我注释掉了重建运行列表的代码,在我的电脑上没有任何区别:
但是,蒙皮工作正常。因此,按钮位置问题必须与使用超高清配置和/或缩放文本的用户相关
然后我注释了蒙皮代码,并在我的电脑上重试。没有更改:
我真的不明白为什么会这样
使现代化
我包括如下自定义消息:
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;
[CustomMessages]
#include AddBackslash(SourcePath) + ".\l.jpn\CustomMessagesJapanese.txt"
这取决于你如何包括文本 在包含MessagesFile的ISL文件中 根据,在UTF-8中保存ISL文件是不合法的 必须使用文件中指定的代码页将其另存为ANSI编码 直接在ISS文件中或使用#include 或者,您可以在iss文件中直接使用UTF-8字符串,方法是在本地[Messages]或[CustomMessages]部分直接使用Language.Key值,如下所示:
[CustomMessages]
English.ViewChangeHistory=View Change History
Japanese.ViewChangeHistory=変更履歴を表示
您还可以#包含使用相同格式的外部文件
在这两种情况下(无论是直接在iss文件中还是在#包含的文件中),您都需要确保文件与BOM一起保存为UTF-8。在没有蒙皮机制的情况下会发生这种情况吗?只是为了排除它作为问题的根源。您是否尝试注释掉重建运行列表的代码?您在上面声称已经完成了,但屏幕截图显示的列表显然仍在重建中。@Miral我也很奇怪。但事实证明这并不是问题所在——正如你在回答/评论中提到的,我不得不将编码更改为
UTF-8bom
。这不是一个ISL文件。这是一个包含在日语注释中的文本文件。我使用#include语句。你是说任何包含在自定义消息部分的文本文件都需要是ANSI吗?如果是这样,那就是一场噩梦。我有多达50种语言。如果我可以在ISS文件中直接使用Unicode字符串,那么为什么不包括它们呢?稍后我将根据您的答案在脚本中加入文本指导来进行测试。谢谢将更新您。否,#包含文件可以是UTF-8,只要它们是带BOM的UTF-8。ANSI限制适用于MessagesFile指令中包含的ISL文件。您在最初的问题中没有具体说明您是如何做到这一点的。如果您使用香草记事本,请使用文件另存为并选择UTF-8作为编码;它将始终使用BOM表。如果您使用其他编辑器,它可能在其他地方有一个设置;例如,记事本++在状态栏中显示“UTF-8”或“UTF-8无BOM”,您可以在“编码”菜单中对其进行更改。