Отключить элементы управления на основе выбора компонентов в Inno Setup
Я хочу отключить элементы управления на своей странице (VST2DirPage
) на основе выбранных компонентов. Я попробовал условие:
if IsComponentSelected('VST64') then
begin
VST2DirPage.Buttons[0].Enabled := False;
VST2DirPage.PromptLabels[0].Enabled := False;
VST2DirPage.Edits[0].Enabled := False;
end
Но элементы, кажется, всегда отключены, поэтому похоже, что они не получают правильные значения для правильной работы. Сценарий ниже:
[Types]
Name: "full"; Description: "{code:FullInstall}";
Name: "custom"; Description: "{code:CustomInstall}"; Flags: iscustom
[Components]
Name: "VST64"; Description: "64-bit VST2"; Types: full; Check: Is64BitInstallMode
Name: "VST"; Description: "32-bit VST2"; Types: full; Check: Is64BitInstallMode
Name: "VST"; Description: "32-bit VST2"; Types: full; Check: not Is64BitInstallMode
[Code]
var VST2DirPage: TInputDirWizardPage;
procedure InitializeWizard;
begin
VST2DirPage := CreateInputDirPage(wpSelectComponents,
'Confirm VST2 Plugin Directory', '',
'Select the folder in which setup should install the VST2 Plugin, then click Next.',
False, '');
VST2DirPage.Add('64-bit folder');
VST2DirPage.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\VST,VSTPluginsPath|{pf}\Steinberg\VSTPlugins}');
VST2DirPage.Add('32-bit folder');
VST2DirPage.Values[1] := ExpandConstant('{reg:HKLM\SOFTWARE\WOW6432NODE\VST,VSTPluginsPath|{pf32}\Steinberg\VSTPlugins}');
if not Is64BitInstallMode then
begin
VST2DirPage.Buttons[0].Enabled := False;
VST2DirPage.PromptLabels[0].Enabled := False;
VST2DirPage.Edits[0].Enabled := False;
end;
end;
1 ответ
InitializeWizard
Функция события происходит еще до того, как показывается установщик. На данный момент вы еще не знаете, какие компоненты выберет пользователь.
Вы должны обновлять состояние элементов управления только тогда, когда вы знаете, какие компоненты выбраны:
- Либо при выходе из страницы "Выбор компонентов".
- Или при входе на пользовательскую страницу.
Это показывает более поздний подход (реализованный с использованием CurPageChanged
функция события):
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = VST2DirPage.ID then
begin
VST2DirPage.Buttons[0].Enabled := not IsComponentSelected('VST64');
VST2DirPage.PromptLabels[0].Enabled := VST2DirPage.Buttons[0].Enabled;
VST2DirPage.Edits[0].Enabled := VST2DirPage.Buttons[0].Enabled;
end;
end;
Обратите внимание, что приведенный выше код не только отключает элементы управления, когда компонент выбран. Он также включает их снова, если пользователь возвращается на страницу "Выбор компонентов" и отменяет выбор компонента.
Смотрите также похожий вопрос:
Inno Setup - измените цвет метки описания задачи и сделайте разрыв строки.