2016-11-22 13 views
0

私は、多かれ少なかれ、このようにする必要がありチェック可能な要素とラベルのツリービュー階層構築しようとしている:Inno Setupを使用してTreeviewデザイン(階層を入れ子にしたタスクグループ)を構築する方法は?

Standalone Controls (label, root) 
|__Check/Uncheck all controls of all groups (checkbox) 
| | 
| |__Controls group 1 (group description label) 
| | |__Check/Uncheck all these controls (checkbox) 
| |  |__Control name 1 (task) 
| |  |__Control name 2 (task) 
| |  |__Control name 3 (task) 
| |  
| |__Controls group 2 (group description label) 
| | |__Check/Uncheck all these controls (checkbox) 
| |  |__Control name 1 (task) 
| |  |__Control name 2 (task) 
| |  |__Control name 3 (task) 

を...というように。

または上に示した階層の場合は、以下のこの変形は、それをコーディングするにはあまりにも難しいことができます。

Standalone Controls (label, root) 
| 
|__Controls group 1 (group description label) 
| |__Check/Uncheck all these controls (checkbox) 
|  |__Control name 1 (task) 
|  |__Control name 2 (task) 
|  |__Control name 3 (task) 
|  
|__Controls group 2 (group description label) 
| |__Check/Uncheck all these controls (checkbox) 
|  |__Control name 1 (task) 
|  |__Control name 2 (task) 
|  |__Control name 3 (task) 

しかし、私がこれまでに得たことはこれです:

enter image description here

この私が持っているコードのサンプルです:

[CustomMessages] 
StandaloneDescr=%nStandalone Controls 
ButtonsDescr=%nButtons 
CheckboxesDescr=%nCheckboxes 
GroupboxesDescr=%nGroupboxes 
KnobsDescr=%nKnobs 
... 

[Tasks] 
Name: WinFormsControls; Description: Check/Uncheck all; GroupDescription: {cm:StandaloneDescr} 

Name: WinFormsControls; Description: Check/Uncheck all; GroupDescription: {cm:ButtonsDescr} 
Name: WinFormsControls\CButton; Description: CButton 
Name: WinFormsControls\GlassButton; Description: Glass Button 
Name: WinFormsControls\MyCommandButtonNET; Description: My Command Button.NET 
Name: WinFormsControls\PulseButton; Description: Pulse Button 

Name: WinFormsControls; Description: Check/Uncheck all; GroupDescription: {cm:CheckboxesDescr} 
Name: WinFormsControls\DontShowAgainCheckbox; Description: Don't Show Again Checkbox 

Name: WinFormsControls; Description: Check/Uncheck all; GroupDescription: {cm:GroupboxesDescr} 
Name: WinFormsControls\Grouper; Description: Grouper 

Name: WinFormsControls; Description: Check/Uncheck all; GroupDescription: {cm:KnobsDescr} 
Name: WinFormsControls\Knob; Description: Knob 
Name: WinFormsControls\KnobControl; Description: KnobControl 

... 

これは正しい?

答えて

2

私があなたの質問を正しく理解していれば、問題はメインの「スタンドアロンコントロール」チェックボックスが正しく動作しないことです。それは階層の一部ではないからです。


最も簡単な解決策はGroupDescriptionにあきらめることです年代とチェックボックスの説明に移動:あなたはGroupDescriptionを維持したい場合は

[Setup] 
ShowTasksTreeLines=yes 

[Tasks] 
Name: WinFormsControls; Description: "Standalone controls" 

Name: WinFormsControls\Buttons; Description: "Buttons" 
Name: WinFormsControls\Buttons\CButton; Description: CButton 
Name: WinFormsControls\Buttons\GlassButton; Description: Glass Button 
Name: WinFormsControls\Buttons\MyCommandButtonNET; Description: My Command Button.NET 
Name: WinFormsControls\Buttons\PulseButton; Description: Pulse Button 

Name: WinFormsControls\Checkboxes; Description: "Checkboxes" 
Name: WinFormsControls\Checkboxes\DontShowAgainCheckbox; Description: Don't Show Again Checkbox 

Name: WinFormsControls\Groupboxes; Description: "Groupboxes" 
Name: WinFormsControls\Groupboxes\Grouper; Description: Grouper 

Name: WinFormsControls\Knobs; Description: "Knobs" 
Name: WinFormsControls\Knobs\Knob; Description: Knob 
Name: WinFormsControls\Knobs\KnobControl; Description: KnobControl 

Task tree


" sを使用すると、メインの「Check/Uncheck all」をプログラムで他のチェックボックスにバインドできます。

procedure TasksListClickCheck(Sender: TObject); 
var 
    Index: Integer; 
begin 
    if WizardForm.TasksList.ItemIndex = 1 then 
    begin 
    for Index := 2 to WizardForm.TasksList.Items.Count - 1 do 
     WizardForm.TasksList.Checked[Index] := WizardForm.TasksList.Checked[1]; 
    end; 
end; 

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

あなたが本当に階層(インデント)を必要とする場合は、カスタムページを作成する必要があります。 Inno Setupは、Tasksセクションのネストされたグループの説明をサポートしていません。子タスクのパラメータGroupDescriptionは無視されます。

var 
    TasksList: TNewCheckListBox; 

procedure InitializeWizard(); 
var 
    CustomSelectTasksPage: TWizardPage; 
begin 
    CustomSelectTasksPage := 
    CreateCustomPage(wpSelectTasks, SetupMessage(msgWizardSelectTasks), SetupMessage(msgSelectTasksDesc)); 

    TasksList := TNewCheckListBox.Create(WizardForm); 
    TasksList.Left := WizardForm.TasksList.Left; 
    TasksList.Top := WizardForm.SelectTasksLabel.Top; 
    TasksList.Width := WizardForm.TasksList.Width; 
    TasksList.Height := WizardForm.TasksList.Top + WizardForm.TasksList.Height - WizardForm.SelectTasksLabel.Top; 

    TasksList.BorderStyle := WizardForm.TasksList.BorderStyle; 
    TasksList.Color := WizardForm.TasksList.Color; 
    TasksList.ShowLines := WizardForm.TasksList.ShowLines; 
    TasksList.MinItemHeight := WizardForm.TasksList.MinItemHeight; 
    TasksList.ParentColor := WizardForm.TasksList.ParentColor; 
    TasksList.WantTabs := WizardForm.TasksList.WantTabs; 

    TasksList.Parent := CustomSelectTasksPage.Surface; 

    TasksList.AddGroup('Standalone controls', '', 0, nil); 
    TasksList.AddCheckBox('Check/Uncheck all', '', 0, True, True, False, True, nil); 
    TasksList.AddGroup('Buttons', '', 1, nil); 
    TasksList.AddCheckBox('Check/Uncheck all', '', 1, True, True, False, True, nil); 
     TasksList.AddCheckBox('CButton', '', 2, True, True, False, True, nil); 
     TasksList.AddCheckBox('Glass Button', '', 2, True, True, False, True, nil); 
     TasksList.AddCheckBox('My Command Button.NET', '', 2, True, True, False, True, nil); 
     TasksList.AddCheckBox('Pulse Button', '', 2, True, True, False, True, nil); 
    TasksList.AddGroup('Checkboxes', '', 1, nil); 
    TasksList.AddCheckBox('Check/Uncheck all', '', 1, True, True, False, True, nil); 
     TasksList.AddCheckBox('Don''t Show Again Checkbox', '', 2, True, True, False, True, nil); 
    TasksList.AddGroup('Knobs', '', 1, nil); 
    TasksList.AddCheckBox('Check/Uncheck all', '', 1, True, True, False, True, nil); 
     TasksList.AddCheckBox('KnobControl', '', 2, True, True, False, True, nil); 
end; 

Custom task page

そして、あなたはCheck parametersを使用して[Files][Run]または[Registry]のようなセクションでのアクションにタスクをバインドする必要があります。

[Files] 
Source: "CButton.dll"; DestDir: "{app}"; Check: GetCustomTask(2) 

[Code] 

var 
    TasksList: TNewCheckListBox; 

{ ... } 

function GetCustomTask(TaskIndex: Integer): Boolean; 
begin 
    Result := TasksList.Checked[TaskIndex]; 
end; 

同様の質問については、How to split tasklist at tasks page of Inno Setup into multiple columns?

を見ます
+0

この実例的な答えを書いて、あなたのお時間のために恐ろしい、私は「すべてチェックを外してください」の代わりに最初のデザインオプションを選択します。 – ElektroStudios

関連する問題