2016-12-28 2 views
1

Dies ist der [Run] Abschnitt meines Skript:Anzeigen von Ausführungsaufgaben als Radioauswahl anstelle von Kontrollkästchen?

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

Auf der letzten Seite des Installateurs der ersten drei zeigen als Kontrollkästchen.

Ich möchte die ersten beiden Radios sein. Sie werden die eine oder andere Bit-Edition starten wollen. Nicht beide.

Ist das möglich?

Oder, wenn ein Kontrollkästchen aktiviert ist, wird das andere deaktiviert.

Antwort

1

Sie müssten die RunList nach Ihren Wünschen zu bauen.

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; 

Auf 64-Bit-System:

Radio buttons in run list

Auf 32-Bit-System:

enter image description here


Der andere Ansatz mit automatisches Deaktivieren des Kontrollkästchens, wenn das andere Kontrollkästchen aktiviert ist, ist ebenfalls möglich.

Sehen Sie eine ähnliche Frage zu einer Aufgabenliste:
Inno Setup Uncheck a task when another task is checked

+0

Fantastisch. Vielen Dank. Ist es möglich, dies zu erweitern, so dass, wenn es 32 Bit PC ist, es nur die Checkbox hat und wenn es 64 Bit PC ist, hat es die zwei Radios? Oder meinst du das wäre ein schlechtes Designkonzept? –

+1

Sicher, verstecken Sie einfach den 64-Bit-Run-Eintrag auf 32-Bit-Systemen mit dem 'Check: IsWin64'-Parameter. Und rufen Sie 'RebuildRunList' nur auf 64-Bit-Systemen auf:' is IsWin64 the RebuildRunList; '. –

+0

Es hat bereits den Prüfparameter. Und die if-Klausel, die du erwähnt hast, mache ich in CurPageChanged. Recht? –

Verwandte Themen