2016-04-25 5 views
0

Вот список моих задач:Inno Setup - Pascal Script - Условно скрыть/показать задачу

[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}" 

Теперь, что я хочу, чтобы достичь скрывается задание (ы) с именем DesktopIcon{engine}, если задача по имени {engine} не выбрано.

Проблема, когда я скрываю одну из задач, изменяется список индексов, и мне нужно, чтобы они ссылались на них конкретно.

+0

Примечание стороны: '{см: CreateDesktopIcon} для D3D Engine' - Вы объединяете локализуемую строку с жестко запрограммированной строкой. Это нехорошо. –

ответ

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" 

Это делает Setup Inno автоматически снимите ребенок «значок» задачу, когда родительская задача «двигатель» снята.

Обратите внимание на флаг 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

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