Крючок стандартного флажка Inno Setup - PullRequest
6 голосов
/ 02 мая 2011

Я добавил InputOptionWizardPage для выбора задач.Это прекрасно работает, но я хотел бы добавить некоторые пользовательские функции.Одна задача зависит от другой, поэтому, если установлен второй флажок, первый должен быть отмечен и выделен серым цветом.

Для этого мне нужно получить доступ к свойствам флажка.Я нашел способы сделать это с помощью полностью настраиваемой страницы, где я бы сам явно создал флажок, но это было бы большой работой, так как большая часть того, что у меня есть, пока удовлетворительная.

Как я могу это сделать?установите флажок, созданный Inno Setup, используя MyInputOptionWizardPage.Add('This will add a checkbox with this caption')?

Ответы [ 2 ]

11 голосов
/ 03 мая 2011

В попытке ответить на ваш вопрос напрямую.

Я подозреваю, что вы использовали CreateInputOptionPage(), который возвращает TInputOptionWizardPage

У него есть метод .Add ('Example') `, который вы упомянули.

TInputOptionWizard спускается TWizardPage, что происходит от TComponent, в котором есть необходимые вам методы.

Обновление: Заменен оригинальный код, этот пример основан на обзоре параметров, доступных в InnoSetupИсходный код ScriptClasses_C.pas Мой оригинальный пример, я думал, что TRadioButton и TCheckBox, где отдельные элементы управления.Вместо этого они называют один элемент управления TNewCheckListBox.Есть несколько способов, которыми кто-то может это осуществить, но самый безопасный способ - использовать.

Этот пример представляет собой полный сценарий установки Inno.

[Setup]
AppName='Test Date Script'
AppVerName='Test Date Script'
DefaultDirName={pf}\test
[Code]

const
 cCheckBox = false;
 cRadioButton  = true;


var
  Opt : TInputOptionWizardPage; 

function BoolToStr(Value : Boolean) : String; 
begin
  if Value then
    result := 'true'
  else
    result := 'false';
end;

procedure ClickEvent(Sender : TObject);
var
 Msg : String;
 I   : Integer;
begin
   // Click Event, allowing inspection of the Values.
    Msg := 'The Following Items are Checked' +#10#13; 
    Msg := Msg + 'Values[0]=' + BoolToStr(Opt.Values[0]) +#10#13;
    Msg := Msg + 'Values[1]=' + BoolToStr(Opt.Values[1]) +#10#13;
    Msg := Msg + 'Values[2]=' + BoolToStr(Opt.Values[2]);

    MsgBox(Msg,mbInformation,MB_OK);
end;
procedure InitializeWizard();
var
  I : Integer; 
  ControlType : Boolean;
begin
  ControlType := cCheckBox;
  Opt := CreateInputOptionPage(1,'Caption','Desc','SubCaption',ControlType, false);
  Opt.Add('Test1');
  Opt.Add('Test2');
  Opt.Add('Test3');

  // Assign the Click Event.
  Opt.CheckListBox.OnClickCheck := @ClickEvent;  
end;
1 голос
/ 03 мая 2011

Вы также можете управлять задачами через родительские отношения, это дает вам поведение, аналогичное тому, о котором вы просили, но не на 100% такое же.Я знаю, что это не отвечает на ваш вопрос напрямую, но намеревается дать вам вариант, который, возможно, будет проще реализовать.Делая это таким образом, вам не нужно беспокоиться об управлении пользовательским диалогом.

[Setup]
;This allows you to show Lines showing parent / Child Relationships
ShowTasksTreeLines=yes

[Tasks]
;Parent Tasks don't use "\"
Name: p1; Description: P1 Test; 
;Child Tasks are named ParentTaskName\ChildTaskName
;Flag don't inheritcheck:Specifies that the task 
;should not automatically become checked when its parent is checked 
Name: p1\c1; Description: C1 Test; Flags: dontinheritcheck;
Name: p1\c2; Description: C2 Test; 
;Default behavior is that child must be selected 
;when a parent is selected
;this can be overridden using the:
;doninheritcheck flag and the checkablealone flag.
Name: p2; Description: P2 Test; Flags: checkablealone;
Name: p2\c1; Description: P2-C1 Test; Flags: dontinheritcheck;
Name: p2\c2; Description: P2-C2 Test; Flags: dontinheritcheck;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...