2016-04-25 15 views
0

はここに私のタスクのリストのショー:Inno Setupの - パスカルスクリプト - 条件付きの非表示/タスク

[Tasks] 
Name: "D3D"; Description: "Install D3D Engine"; GroupDescription: "Engines:" 
Name: "GL"; Description: "Install OpenGL Engine"; GroupDescription: "Engines:"; Flags: unchecked 
Name: "SW"; Description: "Install Software Engine"; GroupDescription: "Engines:"; Flags: unchecked 
Name: "DesktopIcon"; Description: "{cm:CreateDesktopIcon} for the Launcher"; GroupDescription: "{cm:AdditionalIcons}" 
Name: "DesktopIconD3D"; Description: "{cm:CreateDesktopIcon} for the D3D Engine"; GroupDescription: "{cm:AdditionalIcons}" 
Name: "DesktopIconGL"; Description: "{cm:CreateDesktopIcon} for the OpenGL Engine"; GroupDescription: "{cm:AdditionalIcons}" 
Name: "DesktopIconSW"; Description: "{cm:CreateDesktopIcon} for the Software Engine"; GroupDescription: "{cm:AdditionalIcons}" 

さて、私が達成したいことは、タスクが{engine}という名前の場合DesktopIcon{engine}という名前のタスク(複数可)を隠しています選択されていません。

タスクの1つを非表示にすると、インデックスリストが変更され、特にそれらを参照する必要があります。

+0

サイドノート: ':D3D Engine'用{CM CreateDesktopIcon} - あなたがハードコーディングされた文字列でローカライズ文字列を結合しています。それは良い方法ではありません。 –

答えて

0

インデックスの問題を解決する方法があると確信しています。しかし、タスクを参照するコードやコードを削除するコードは表示されませんでした。だから私たちはあなたにそれを手伝うことはできません。

とにかく、タスクを隠すことはこれを解決する一般的な方法ではありません。あなたは関係を解決するために使用できるタスク階層が組み込まれています。または、タスクを削除する代わりに無効にすることもできます。


「アイコン」タスクをそれぞれの「エンジン」タスクのサブタスクにする。

[Tasks] 
Name: "DesktopIcon"; Description: "{cm:CreateDesktopIcon} for the Launcher" 
Name: "D3D"; Description: "Install D3D Engine"; GroupDescription: "Engines:"; Flags: checkablealone 
Name: "D3D\DesktopIcon"; Description: "{cm:CreateDesktopIcon} for the D3D Engine" 
Name: "GL"; Description: "Install OpenGL Engine"; GroupDescription: "Engines:"; Flags: unchecked checkablealone 
Name: "GL\DesktopIcon"; Description: "{cm:CreateDesktopIcon} for the OpenGL Engine" 
Name: "SW"; Description: "Install Software Engine"; GroupDescription: "Engines:"; Flags: unchecked checkablealone 
Name: "SW\DesktopIcon"; Description: "{cm:CreateDesktopIcon} for the Software Engine" 

これにより、親「エンジン」タスクがチェックされていない場合、Inno Setupは自動的に子「アイコン」タスクのチェックを外します。

エンジンタスクではcheckablealoneフラグに注意してください。それぞれの "エンジン" タスクがオフになっている場合は、 "アイコン" のタスクを無効に

Subtasks


procedure UpdateIconTask(IconIndex: Integer; EngineIndex: Integer); 
begin 
    WizardForm.TasksList.ItemEnabled[IconIndex] := WizardForm.TasksList.Checked[EngineIndex]; 
    if not WizardForm.TasksList.Checked[EngineIndex] then 
    begin 
    WizardForm.TasksList.Checked[IconIndex] := False; 
    end; 
end; 

procedure UpdateIconTasks(); 
begin 
    UpdateIconTask(6, 1); 
    UpdateIconTask(7, 2); 
    UpdateIconTask(8, 3); 
end; 

procedure TasksListClickCheck(Sender: TObject); 
begin 
    UpdateIconTasks(); 
end; 

procedure InitializeWizard(); 
begin 
    WizardForm.TasksList.OnClickCheck := @TasksListClickCheck; 
end; 

procedure CurPageChanged(CurPageID: Integer); 
begin 
    if CurPageID = wpSelectTasks then 
    begin 
    { Initial update } 
    UpdateIconTasks(); 
    end; 
end; 

enter image description here

関連する問題