Inno setup Inno设置-定义音乐按钮和语言选择器错误?
这是出现错误的代码:Inno setup Inno设置-定义音乐按钮和语言选择器错误?,inno-setup,Inno Setup,这是出现错误的代码: #include "Music\botva2.iss" #include "Music\BASS_Module.iss" [Code] function ShellExecute(hwnd: HWND; lpOperation: string; lpFile: string; lpParameters: string; lpDirectory: string; nShowCmd: Integer): THandle; external 'ShellExecuteW@
#include "Music\botva2.iss"
#include "Music\BASS_Module.iss"
[Code]
function ShellExecute(hwnd: HWND; lpOperation: string; lpFile: string;
lpParameters: string; lpDirectory: string; nShowCmd: Integer): THandle;
external 'ShellExecuteW@shell32.dll stdcall';
var
LanguageForm: TSetupForm;
SelectLabel: TNewStaticText;
CancelButton: TNewButton;
procedure LangChange(Sender : TObject);
begin
case TNewComboBox(Sender).ItemIndex of
0: { English }
begin
SelectLabel.Caption := 'Select the language to the installation:';
CancelButton.Caption := 'Cancel';
LanguageForm.Caption := 'PH';
end;
1: { Español }
begin
SelectLabel.Caption := 'Selecciona el idioma de la instalación:';
CancelButton.Caption := 'Cancelar';
LanguageForm.Caption := 'PH';
end;
end;
end;
procedure SelectLanguage();
var
OKButton: TNewButton;
LangCombo: TNewComboBox;
Languages: TStrings;
Params: string;
Instance: THandle;
P, I: Integer;
S, L: string;
begin
Languages := TStringList.Create();
Languages.Add('eng=English');
Languages.Add('spa=Español');
LanguageForm := CreateCustomForm;
LanguageForm.Caption := SetupMessage(msgSelectLanguageTitle);
LanguageForm.ClientWidth := ScaleX(240);
LanguageForm.ClientHeight := ScaleY(125);
LanguageForm.BorderStyle := bsDialog;
LanguageForm.Center;
CancelButton := TNewButton.Create(LanguageForm);
CancelButton.Parent := LanguageForm;
CancelButton.Left := ScaleX(140);
CancelButton.Top := ScaleY(93);
CancelButton.Width := ScaleY(90);
CancelButton.Height := ScaleY(23);
CancelButton.TabOrder := 3;
CancelButton.ModalResult := mrCancel;
CancelButton.Caption := SetupMessage(msgButtonCancel);
OKButton := TNewButton.Create(LanguageForm);
OKButton.Parent := LanguageForm;
OKButton.Left := ScaleX(10);
OKButton.Top := ScaleY(93);
OKButton.Width := ScaleX(90);
OKButton.Height := ScaleY(23);
OKButton.Caption := SetupMessage(msgButtonOK);
OKButton.Default := True
OKButton.ModalResult := mrOK;
OKButton.TabOrder := 2;
LangCombo := TNewComboBox.Create(LanguageForm);
LangCombo.Parent := LanguageForm;
LangCombo.Left := ScaleX(16);
LangCombo.Top := ScaleY(56);
LangCombo.Width := ScaleX(206);
LangCombo.Height := ScaleY(21);
LangCombo.Style := csDropDownList;
LangCombo.DropDownCount := 16;
LangCombo.TabOrder := 1;
SelectLabel := TNewStaticText.Create(LanguageForm);
SelectLabel.Parent := LanguageForm;
SelectLabel.Left := ScaleX(16);
SelectLabel.Top := ScaleY(15);
SelectLabel.Width := ScaleX(273);
SelectLabel.Height := ScaleY(39);
SelectLabel.AutoSize := False
SelectLabel.Caption := SetupMessage(msgSelectLanguageLabel);
SelectLabel.TabOrder := 0;
SelectLabel.WordWrap := True;
for I := 0 to Languages.Count - 1 do
begin
P := Pos('=', Languages.Strings[I]);
L := Copy(Languages.Strings[I], 0, P - 1);
S := Copy(Languages.Strings[I], P + 1, Length(Languages.Strings[I]) - P);
LangCombo.Items.Add(S);
if L = ActiveLanguage then
LangCombo.ItemIndex := I;
LangCombo.OnChange := @LangChange;
end;
if LanguageForm.ShowModal = mrOK then
begin
// Collect current instance parameters
for I := 1 to ParamCount do
begin
S := ParamStr(I);
// Unique log file name for the elevated instance
if CompareText(Copy(S, 1, 5), '/LOG=') = 0 then
begin
S := S + '-localized';
end;
// Do not pass our /SL5 switch
if CompareText(Copy(S, 1, 5), '/SL5=') <> 0 then
begin
Params := Params + AddQuotes(S) + ' ';
end;
end;
L := Languages.Strings[LangCombo.ItemIndex];
P := Pos('=', L);
L := Copy(L, 0, P-1);
// ... and add selected language
Params := Params + '/LANG=' + L;
Instance := ShellExecute(0, '', ExpandConstant('{srcexe}'), Params, '', SW_SHOW);
if Instance <= 32 then
begin
MsgBox(
Format('Running installer with selected language failed. Code: %d', [Instance]),
mbError, MB_OK);
end;
end;
end;
function InitializeSetup(): Boolean;
var
Language: string;
begin
Result := True;
Language := ExpandConstant('{param:LANG}');
if Language = '' then
begin
Log('No language specified, showing language dialog');
SelectLanguage();
Result := False;
Exit;
end
else
begin
Log('Language specified, proceeding with installation');
end;
end;
procedure RedesignWizardForm;
begin
with WizardForm do
begin
BorderIcons:=[];
Bevel1.Hide;
AutoScroll := False;
ClientHeight := ScaleY(349);
end;
with WizardForm.CancelButton do
begin
Top := ScaleY(319);
end;
with WizardForm.NextButton do
begin
Top := ScaleY(319);
end;
with WizardForm.BackButton do
begin
Top := ScaleY(319);
end;
with WizardForm.WizardBitmapImage do
begin
Width := ScaleX(500);
end;
with WizardForm.WelcomeLabel2 do
begin
Visible := False;
end;
with WizardForm.WelcomeLabel1 do
begin
Visible := False;
end;
with WizardForm.WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Width := ScaleX(500);
Height := ScaleY(60);
end;
with WizardForm.PageDescriptionLabel do
begin
Visible := False;
end;
with WizardForm.PageNameLabel do
begin
Visible := False;
end;
with WizardForm.WizardBitmapImage2 do
begin
Width := ScaleX(500);
ExtractTemporaryFile('WizardForm.WizardBitmapImage2.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.WizardBitmapImage2.bmp'));
end;
with WizardForm.FinishedLabel do
begin
Visible := False;
end;
with WizardForm.FinishedHeadingLabel do
begin
Visible := False;
end;
end;
procedure InitializeWizard1();
begin
RedesignWizardForm;
WizardForm.DiskSpaceLabel.Visible := False;
end;
procedure InitializeWizard2();
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('CallbackCtrl.dll');
ExtractTemporaryFile('botva2.dll');
ExtractTemporaryFile('MusicButton.png');
ExtractTemporaryFile('Music.mp3');
BASS_Init('{tmp}\Music.mp3')
BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', 20, 320, 36, 36, 4)
end;
procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
end;
procedure DeinitializeSetup();
begin
BASS_DeInit; //Îñâîáîæäàåì ïðîöåññ
gdipShutdown
end;
#包括“Music\botva2.iss”
#包括“Music\BASS\u Module.iss”
[守则]
函数ShellExecute(hwnd:hwnd;lpOperation:string;lpFile:string;
lpParameters:string;lpDirectory:string;nShowCmd:Integer):THandle;
外部的ShellExecuteW@shell32.dllstdcall';
变量
语言形式:TSetupForm;
选择标签:TNewStaticText;
取消按钮:TNewButton;
程序变更(发送方:TObject);
开始
案例TNEWCOMBOX(发送方)。项目索引
0:{English}
开始
SelectLabel.Caption:=“选择安装的语言:”;
取消按钮。标题:=“取消”;
说明:='PH';
结束;
1:{Español}
开始
选择Label.Caption:=“Selecciona el idioma de la instalación:”;
CancelButton.标题:='Cancelar';
说明:='PH';
结束;
结束;
结束;
过程选择语言();
变量
OK按钮:TNewButton;
LangCombo:TNewComboBox;
语言:TStrings;
参数:字符串;
实例:坦德尔;
P、 I:整数;
S、 L:字符串;
开始
语言:=TStringList.Create();
语言。添加('eng=English');
语言。添加('spa=Español');
LanguageForm:=CreateCustomForm;
LanguageForm.Caption:=设置消息(msgSelectLanguageTitle);
LanguageForm.ClientWidth:=ScaleX(240);
LanguageForm.ClientHeight:=ScaleY(125);
LanguageForm.BorderStyle:=bsDialog;
语言形式。中心;
CancelButton:=TNewButton.Create(LanguageForm);
CancelButton.Parent:=LanguageForm;
CancelButton.Left:=ScaleX(140);
CancelButton.Top:=ScaleY(93);
取消按钮。宽度:=ScaleY(90);
取消按钮高度:=ScaleY(23);
CancelButton.TabOrder:=3;
CancelButton.ModalResult:=mrCancel;
CancelButton.Caption:=设置消息(msgButtonCancel);
OKButton:=TNewButton.Create(LanguageForm);
OKButton.Parent:=LanguageForm;
OKButton.Left:=ScaleX(10);
OKButton.Top:=ScaleY(93);
确定按钮宽度:=ScaleX(90);
确定按钮高度:=ScaleY(23);
OKButton.Caption:=SetupMessage(msgButtonOK);
默认值:=True
OKButton.ModalResult:=mrOK;
OKButton.TabOrder:=2;
LangCombo:=TNewComboBox.Create(LanguageForm);
LangCombo.Parent:=LanguageForm;
LangCombo.Left:=ScaleX(16);
LangCombo.Top:=ScaleY(56);
LangCombo.Width:=ScaleX(206);
LangCombo.高度:=ScaleY(21);
LangCombo.Style:=csDropDownList;
LangCombo.DropDownCount:=16;
LangCombo.TabOrder:=1;
SelectLabel:=TNewStaticText.Create(LanguageForm);
选择Label.Parent:=LanguageForm;
SelectLabel.Left:=ScaleX(16);
选择label.Top:=ScaleY(15);
选择标签宽度:=ScaleX(273);
选择label.Height:=ScaleY(39);
SelectLabel.AutoSize:=False
选择label.Caption:=SetupMessage(msgSelectLanguageLabel);
选择label.TabOrder:=0;
选择label.WordWrap:=True;
对于I:=0到语言。计数-1 do
开始
P:=Pos('=',Languages.Strings[I]);
L:=Copy(Languages.Strings[I],0,P-1);
S:=Copy(Languages.Strings[I],P+1,Length(Languages.Strings[I])-P);
LangCombo.Items.Add(S);
如果L=ActiveLanguage,则
LangCombo.ItemIndex:=I;
LangCombo.OnChange:=@LangChange;
结束;
如果LanguageForm.showmodel=mrOK,则
开始
//收集当前实例参数
对于I:=1的参数
开始
S:=ParamStr(I);
//提升实例的唯一日志文件名
如果CompareText(Copy(S,1,5),“/LOG=”)=0,则
开始
S:=S+'-局部';
结束;
//不要通过我们的/SL5开关
如果CompareText(复制(S,1,5),“/SL5=”)为0,则
开始
Params:=Params+AddQuotes+“”;
结束;
结束;
L:=Languages.Strings[LangCombo.ItemIndex];
P:=Pos('=',L);
L:=副本(L,0,P-1);
// ... 并添加所选语言
参数:=Params+'/LANG='+L;
实例:=ShellExecute(0',ExpandConstant({srceexe}'),Params',SW_SHOW);
如果实例调用DeinitializeSetup
,即使通过从初始化设置返回False
中止设置
所以我猜BASS\u DeInit
(或者gdipShutdown
)失败了,因为没有调用等价的BASS\u Init
当从未调用过BASS\u Init
时,必须避免调用DeinitializeSetup
中的代码
var
BASS_初始化:布尔;
过程初始化为wAzard2();
开始
提取临时文件('BASS.dll');
提取临时文件('CallbackCtrl.dll');
提取临时文件('botva2.dll');
提取临时文件('MusicButton.png');
提取临时文件('Music.mp3');
BASS_Init(“{tmp}\Music.mp3”)
BASS_CreateOnOffButton(WizardForm,{tmp}\MusicButton.png',20、320、36、36、4);
BASS_已初始化:=真;
结束;
过程去初始化设置();
开始
如果BASS_已初始化,则
开始
贝斯·迪尼特;
gdipShutdown;
结束;
结束;