AlexS
Новичок
Всем привет! Возник вопрос. На странице есть чекбоксы (в моём случае три), возможность выбора второго и третьего зависит от того, выбран ли первый.
Чтобы понятнее было, их задача состоит в добавлении ключей реестра. Первый (основной) создает пункты в контекстном меню, второй добавляет возможность сделать пункты вложенными, третий добавляет иконки к пунктам меню. Собственно тут задача: если выбирается второй или третий чекбокс, то автоматически выбирается и первый; если снять отметку с первого, то снимаются отметки со второго и(или) третьего. Как такое реализуется в TasksList я уже разобрался, а вот как решить с отдельными чекбосами уже дня два вожусь. Прошу помощи.
Чтобы понятнее было, их задача состоит в добавлении ключей реестра. Первый (основной) создает пункты в контекстном меню, второй добавляет возможность сделать пункты вложенными, третий добавляет иконки к пунктам меню. Собственно тут задача: если выбирается второй или третий чекбокс, то автоматически выбирается и первый; если снять отметку с первого, то снимаются отметки со второго и(или) третьего. Как такое реализуется в TasksList я уже разобрался, а вот как решить с отдельными чекбосами уже дня два вожусь. Прошу помощи.
[Setup]
AppName=My Program
AppVersion=1.5
CreateAppDir=no
DisableWelcomePage=yes
[Languages]
Name: "default"; MessagesFile: "compilerefault.isl"
[_Code]
var
CustomPage: TWizardPage;
AddToMenu, CascadeMenu, AddMenuIcons: TNewCheckBox;
procedure InitializeWizard();
begin
{ Creates custom wizard page }
CustomPage := CreateCustomPage(wpWelcome, 'CustomPage_Caption', 'CustomPage_Description');
{ AddToMenu }
AddToMenu := TNewCheckBox.Create(WizardForm);
with AddToMenu do
begin
Parent := CustomPage.Surface;
SetBounds(ScaleX(32),ScaleY(16),ScaleX(177),ScaleY(17));
Caption := 'Добавить в контекстное меню';
end;
{ CascadeMenu }
CascadeMenu := TNewCheckBox.Create(WizardForm);
with CascadeMenu do
begin
Parent := CustomPage.Surface;
SetBounds(ScaleX(32),ScaleY(40),ScaleX(177),ScaleY(17));
Caption := 'Вложенные пункты меню';
end;
{ AddMenuIcons }
AddMenuIcons := TNewCheckBox.Create(WizardForm);
with AddMenuIcons do
begin
Parent := CustomPage.Surface;
SetBounds(ScaleX(32),ScaleY(64),ScaleX(177),ScaleY(17));
Caption := 'Иконки в контекстном меню';
end;
end;
AppName=My Program
AppVersion=1.5
CreateAppDir=no
DisableWelcomePage=yes
[Languages]
Name: "default"; MessagesFile: "compilerefault.isl"
[_Code]
var
CustomPage: TWizardPage;
AddToMenu, CascadeMenu, AddMenuIcons: TNewCheckBox;
procedure InitializeWizard();
begin
{ Creates custom wizard page }
CustomPage := CreateCustomPage(wpWelcome, 'CustomPage_Caption', 'CustomPage_Description');
{ AddToMenu }
AddToMenu := TNewCheckBox.Create(WizardForm);
with AddToMenu do
begin
Parent := CustomPage.Surface;
SetBounds(ScaleX(32),ScaleY(16),ScaleX(177),ScaleY(17));
Caption := 'Добавить в контекстное меню';
end;
{ CascadeMenu }
CascadeMenu := TNewCheckBox.Create(WizardForm);
with CascadeMenu do
begin
Parent := CustomPage.Surface;
SetBounds(ScaleX(32),ScaleY(40),ScaleX(177),ScaleY(17));
Caption := 'Вложенные пункты меню';
end;
{ AddMenuIcons }
AddMenuIcons := TNewCheckBox.Create(WizardForm);
with AddMenuIcons do
begin
Parent := CustomPage.Surface;
SetBounds(ScaleX(32),ScaleY(64),ScaleX(177),ScaleY(17));
Caption := 'Иконки в контекстном меню';
end;
end;
[Setup]
AppName=My Program
AppVersion=1.5
CreateAppDir=no
DisableWelcomePage=yes
[Languages]
Name: "en"; MessagesFile: "compiler:Languages\English.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "interginshell"; Description: "{cm:IntergInShellDescr}"; GroupDescription: "{cm:AdditSettings}";
Name: "shellmenuicon"; Description: "{cm:shellmenuiconDescr}"; GroupDescription: "{cm:AdditSettings}";
Name: "cascadshellmenu"; Description: "{cm:CascadShellMenuDescr}"; GroupDescription: "{cm:AdditSettings}";
[CustomMessages]
ru.AdditSettings=Дополнительные настройки:
ru.IntergInShellDescr=Встроить в контекстное меню Windows
ru.CascadShellMenuDescr=Каскадное контекстное меню
ru.shellmenuiconDescr=Иконки в контекстном меню
en.AdditSettings=Additional settings:
en.IntergInShellDescr=Integrate in Windows context menu
en.CascadShellMenuDescr=Cascaded context menu
en.shellmenuiconDescr=Icons in context menu
[_Code]
var
DefaultTasksClickCheck: TNotifyEvent;
TaskItemSelected: Boolean;
procedure UpdateTasks;
var
Index: Integer;
Index2: Integer;
begin
if (not TaskItemSelected) and (not IsTaskSelected('interginshell')) then
begin
Index := WizardForm.TasksList.Items.IndexOf(ExpandConstant ('{cm:CascadShellMenuDescr}'));
WizardForm.TasksList.CheckItem(Index, coUncheck);
Index2 := WizardForm.TasksList.Items.IndexOf(ExpandConstant ('{cm:shellmenuiconDescr}'));
WizardForm.TasksList.CheckItem(Index2, coUncheck);
TaskItemSelected := True;
end;
if TaskItemSelected and IsTaskSelected('shellmenuicon') then
begin
Index := WizardForm.TasksList.Items.IndexOf(ExpandConstant ('{cm:IntergInShellDescr}'));
WizardForm.TasksList.CheckItem(Index, cocheck);
TaskItemSelected := False;
end;
if TaskItemSelected and IsTaskSelected('cascadshellmenu') then
begin
Index := WizardForm.TasksList.Items.IndexOf(ExpandConstant ('{cm:IntergInShellDescr}'));
WizardForm.TasksList.CheckItem(Index, cocheck);
TaskItemSelected := False;
end;
end;
procedure TasksClickCheck(Sender: TObject);
begin
if DefaultTasksClickCheck <> nil then
DefaultTasksClickCheck(Sender);
UpdateTasks;
end;
procedure InitializeWizard();
begin
DefaultTasksClickCheck := WizardForm.TasksList.OnClickCheck;
WizardForm.TasksList.OnClickCheck := @TasksClickCheck;
end;
AppName=My Program
AppVersion=1.5
CreateAppDir=no
DisableWelcomePage=yes
[Languages]
Name: "en"; MessagesFile: "compiler:Languages\English.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "interginshell"; Description: "{cm:IntergInShellDescr}"; GroupDescription: "{cm:AdditSettings}";
Name: "shellmenuicon"; Description: "{cm:shellmenuiconDescr}"; GroupDescription: "{cm:AdditSettings}";
Name: "cascadshellmenu"; Description: "{cm:CascadShellMenuDescr}"; GroupDescription: "{cm:AdditSettings}";
[CustomMessages]
ru.AdditSettings=Дополнительные настройки:
ru.IntergInShellDescr=Встроить в контекстное меню Windows
ru.CascadShellMenuDescr=Каскадное контекстное меню
ru.shellmenuiconDescr=Иконки в контекстном меню
en.AdditSettings=Additional settings:
en.IntergInShellDescr=Integrate in Windows context menu
en.CascadShellMenuDescr=Cascaded context menu
en.shellmenuiconDescr=Icons in context menu
[_Code]
var
DefaultTasksClickCheck: TNotifyEvent;
TaskItemSelected: Boolean;
procedure UpdateTasks;
var
Index: Integer;
Index2: Integer;
begin
if (not TaskItemSelected) and (not IsTaskSelected('interginshell')) then
begin
Index := WizardForm.TasksList.Items.IndexOf(ExpandConstant ('{cm:CascadShellMenuDescr}'));
WizardForm.TasksList.CheckItem(Index, coUncheck);
Index2 := WizardForm.TasksList.Items.IndexOf(ExpandConstant ('{cm:shellmenuiconDescr}'));
WizardForm.TasksList.CheckItem(Index2, coUncheck);
TaskItemSelected := True;
end;
if TaskItemSelected and IsTaskSelected('shellmenuicon') then
begin
Index := WizardForm.TasksList.Items.IndexOf(ExpandConstant ('{cm:IntergInShellDescr}'));
WizardForm.TasksList.CheckItem(Index, cocheck);
TaskItemSelected := False;
end;
if TaskItemSelected and IsTaskSelected('cascadshellmenu') then
begin
Index := WizardForm.TasksList.Items.IndexOf(ExpandConstant ('{cm:IntergInShellDescr}'));
WizardForm.TasksList.CheckItem(Index, cocheck);
TaskItemSelected := False;
end;
end;
procedure TasksClickCheck(Sender: TObject);
begin
if DefaultTasksClickCheck <> nil then
DefaultTasksClickCheck(Sender);
UpdateTasks;
end;
procedure InitializeWizard();
begin
DefaultTasksClickCheck := WizardForm.TasksList.OnClickCheck;
WizardForm.TasksList.OnClickCheck := @TasksClickCheck;
end;
Последнее редактирование: