2016-11-09 4 views
1

Теперь я совмещаю сценарий, который я хочу, но имеет ошибку.Слияние функций события (InitializeWizard) из разных источников

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;.

Просьба помочь мне.

ответ

1

При повторном использовании различных реализаций функций из разных источников обычно используются те же самые Inno Setup event functions (например, InitializeWizard).

Вы должны объединить эти функции событий, так как может быть реализована только одна функция.

Вы можете сделать это, добавив уникальный суффикс к различной реализации и вызвав их из основной реализации.

Основная реализация должна быть ниже других реализаций.

Например, если один источник имеет 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; 

 Смежные вопросы

  • Нет связанных вопросов^_^