gpt4 book ai didi

inno-setup - 合并不同来源的事件函数(InitializeWizard)实现

转载 作者:行者123 更新时间:2023-12-04 01:19:32 24 4
gpt4 key购买 nike

我现在正在组合我想要的脚本,但它有一个错误。

Screenshot

当我放置一个句点时,它会运行但缺少其他功能。

这是我的代码:

procedure InitializeWizard;
begin
MessageBoxTimeout(WizardForm.Handle, 'MsgBox ' +
Timeout 'Setup', MB_OK or MB_ICONINFORMATION, 0, 2000);
end;

var
TuneLabel: TLabel;

begin
ExtractTemporaryFile('tune.xm');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
SoundCtrlButton := TNewButton.Create(WizardForm);
Music := BASS_MusicLoad(False,
ExpandConstant('{tmp}\tune.xm'), 0, 0,
EncodingFlag or BASS_SAMPLE_LOOP, 0);
BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, 10000);
BASS_ChannelPlay(Music, False);

SoundCtrlButton := TNewButton.Create(WizardForm);
SoundCtrlButton.Parent := WizardForm;
SoundCtrlButton.Left := 10;
SoundCtrlButton.TabStop := False;
SoundCtrlButton.Top := WizardForm.ClientHeight -
SoundCtrlButton.Height - 9;
SoundCtrlButton.Width := 40;
SoundCtrlButton.Caption :=
ExpandConstant('{cm:SoundCtrlButtonCaptionSoundOff}');
SoundCtrlButton.OnClick := @SoundCtrlButtonClick;
TuneLabel := TLabel.Create(WizardForm);
TuneLabel.Parent := WizardForm;
TuneLabel.Caption := 'Tune';
TuneLabel.Left := SoundCtrlButton.Left + SoundCtrlButton.Width + ScaleX(5);
TuneLabel.Top :=
SoundCtrlButton.Top + ((SoundCtrlButton.Height - TuneLabel.Height) div 2);
end;
end;

错误是指最后一个 end; 之后的一行.

请帮我度过难关。

最佳答案

当您重用来自不同来源的各种功能实现时,那些通常实现相同的 Inno Setup event functions (如 InitializeWizard )。
Inno Setup 6 的解决方案非常简单,如下图所示。在旧版本中,它更复杂。见下。

创新设置 6
Inno Setup 6 有 event attributes有助于解决此问题的功能。
只需确保您的每个事件实现都有一个唯一的名称,例如附加唯一后缀。并添加 event具有已实现事件名称的属性。

[Code]
procedure InitializeWizard;
begin
Log('InitializeWizard called');
end;

<event('InitializeWizard')>
procedure InitializeWizard2;
begin
Log('InitializeWizard2 called');
end;

创新设置 5
在不支持事件属性的旧版本 Inno Setup 中,您必须合并这些事件函数,因为只能有一个函数实现。
您可以通过将唯一后缀附加到不同的实现而不是从主实现调用它们来实现。
主要实现必须低于其他实现。
例如,如果一个来源有 InitializeWizard事件函数实现为:

var
GlobalVariable1: Integer;

procedure SubProcedure1;
begin
{ blah }
end;

procedure InitializeWizard;
var
Variable1: Integer;
Variable2: Integer;
begin
Variable1 := GlobalVariable1;
SubProcedure1;
end;
另一个来源为:
var
GlobalVariableA: Integer;

procedure SubProcedureA;
begin
{ blah }
end;

procedure InitializeWizard;
var
VariableA: Integer;
begin
VariableA := GlobalVariableA;
SubProcedureA;
end;
然后合并的代码应该是:
var
GlobalVariable1: Integer;

procedure SubProcedure1;
begin
{ blah }
end;

procedure InitializeWizard1;
var
Variable1: Integer;
Variable2: Integer;
begin
Variable1 := GlobalVariable1;
SubProcedure1;
end;

var
GlobalVariableA: Integer;

procedure SubProcedureA;
begin
{ blah }
end;

procedure InitializeWizard2;
var
VariableA: Integer;
begin
VariableA := GlobalVariableA;
SubProcedureA;
end;

procedure InitializeWizard;
begin
InitializeWizard1;
InitializeWizard2;
end;
另见 Inno Setup - Merging implementations of event functions that return boolean (like InitializeSetup) .

因此,在您的特定情况下,代码应该是:
procedure InitializeWizard1;
begin
MessageBoxTimeout(WizardForm.Handle, 'MsgBox ' +
Timeout 'Setup', MB_OK or MB_ICONINFORMATION, 0, 2000);
end;

procedure InitializeWizard2;
var
TuneLabel: TLabel;
begin
ExtractTemporaryFile('tune.xm');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
SoundCtrlButton := TNewButton.Create(WizardForm);
Music := BASS_MusicLoad(False,
ExpandConstant('{tmp}\tune.xm'), 0, 0,
EncodingFlag or BASS_SAMPLE_LOOP, 0);
BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, 10000);
BASS_ChannelPlay(Music, False);

SoundCtrlButton := TNewButton.Create(WizardForm);
SoundCtrlButton.Parent := WizardForm;
SoundCtrlButton.Left := 10;
SoundCtrlButton.TabStop := False;
SoundCtrlButton.Top := WizardForm.ClientHeight -
SoundCtrlButton.Height - 9;
SoundCtrlButton.Width := 40;
SoundCtrlButton.Caption :=
ExpandConstant('{cm:SoundCtrlButtonCaptionSoundOff}');
SoundCtrlButton.OnClick := @SoundCtrlButtonClick;
TuneLabel := TLabel.Create(WizardForm);
TuneLabel.Parent := WizardForm;
TuneLabel.Caption := 'Tune';
TuneLabel.Left := SoundCtrlButton.Left + SoundCtrlButton.Width + ScaleX(5);
TuneLabel.Top :=
SoundCtrlButton.Top + ((SoundCtrlButton.Height - TuneLabel.Height) div 2);
end;
end;

procedure InitializeWizard;
begin
InitializeWizard1;
InitializeWizard2;
end;

如果您使用 Inno 安装脚本 #Includes (ISSI),请参阅 Implementing event functions InitializeWizard while using ISSI (to add background image) in Inno Setup: Duplicate identifier 'INITIALIZEWIZARD' .

关于inno-setup - 合并不同来源的事件函数(InitializeWizard)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40512631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com