2016-12-28 5 views
1

Это [Run] часть моего сценария:Показывать задания запуска в качестве выбора радио вместо флажков?

[Run] 
Filename: "{app}\MeetSchedAssist.exe"; Flags: nowait postinstall skipifsilent runasoriginaluser; Description: "{cm:LaunchProgram,Meeting Schedule Assistant}" 
Filename: "{app}\MeetSchedAssist_x64.exe"; Flags: nowait postinstall runasoriginaluser unchecked skipifsilent; Description: "{cm:LaunchProgram,Meeting Schedule Assistant (64 bit)}"; Check: IsWin64 
Filename: "{win}\hh.exe"; Parameters: "{app}\MeetSchedAssist.chm::/HelpRevision.htm"; WorkingDir: "{app}"; Flags: nowait postinstall runmaximized; Description: "{cm:ViewChangeHistory}" 
Filename: {dotnet40}\regasm.exe; Parameters: PTSTools.dll /codebase; WorkingDir: {app}; Flags: runhidden 
Filename: {dotnet4064}\regasm.exe; Parameters: PTSTools.dll /codebase; WorkingDir: {app}; Flags: runhidden; Check: IsWin64; 

На последней странице инсталлятора первые три шоу в качестве флажков.

Я бы хотел, чтобы первые два были радиостанциями. Они захотят начать одно или другое битовое издание. Не оба.

Возможно ли это?

Или, когда один флажок отмечен, другой становится неактуальным.

ответ

1

Вам нужно будет перестроить RunList по вашему вкусу.

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 two entries are radio buttons } 
    if (I = 0) or (I = 1) 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; 

На 64-битной системе:

Radio buttons in run list

На 32-битной системе:

enter image description here


Другой подход с также может быть установлен флажок «Автоматически снятие флажка», когда проверяется другой.

См аналогичный вопрос о списке задач:
Inno Setup Uncheck a task when another task is checked

+0

Fantastic. Благодарю. Можно ли продлить это так, чтобы, если это 32-битный ПК, у него есть только флажок, и если это 64-битный ПК, у него есть два радиостанции? Или вы чувствуете, что это будет плохая концепция дизайна? –

+1

Конечно, просто скройте 64-битную запись Run в 32-битных системах, используя параметр 'Check: IsWin64'. И вызовите 'RebuildRunList' только в 64-битных системах:' is IsWin64 RebuildRunList; '. –

+0

Он уже имеет параметр проверки. И предложение if, которое вы упомянули, я делаю в CurPageChanged. Правильно? –