2011-05-01 30 views
5

Agregué un InputOptionWizardPage para seleccionar tareas. Esto funciona bien, pero me gustaría agregar algunas funcionalidades personalizadas. Una tarea depende de la otra, por lo que si se marca la segunda casilla de verificación, la primera debe marcarse y atenuarse.Hook estándar Inno Setup checkbox

Para hacer esto, necesito acceder a las propiedades de una casilla de verificación. Encontré maneras de hacer esto usando una página completamente personalizada, donde explícitamente crearía la casilla de verificación, pero eso sería mucho trabajo, ya que la mayoría de lo que tengo hasta ahora es satisfactorio.

¿Cómo puedo enganchar una casilla de verificación que fue creada por Inno Setup, usando MyInputOptionWizardPage.Add('This will add a checkbox with this caption')?

Respuesta

0

También puede controlar las tareas por relaciones principales, le da un comportamiento similar al que está pidiendo, pero no es 100% el mismo. Sé que esto no responde su pregunta directamente, pero tiene la intención de darle una opción que quizás sea más fácil de implementar. Al hacerlo de esta manera, no tiene que preocuparse por administrar un cuadro de diálogo personalizado.

[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; 
10

En un intento por responder su pregunta directamente.

que sospecha que ha usado CreateInputOptionPage() que devuelve un TInputOptionWizardPage

Esto tiene el método `' .Add ('Ejemplo') que lo mencionas.

TInputOptionWizard desciende TWizardPage que desciende de TComponent que tiene los métodos que necesita.

Actualización: Sustituido Código original, este ejemplo se basa en una revisión de las opciones disponibles en el código fuente de InnoSetup ScriptClasses_C.pas Mi ejemplo original, pensé que TRadioButton y TCheckBox controles donde individuales. En su lugar, es un control llamado TNewCheckListBox. Hay un par de formas en que alguien puede lograr esto, pero la forma más segura es usarla.

Este ejemplo es una secuencia de comandos Inno Setup completa.

[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; 
+0

@Robert - gracias por eso. Aparece un error de desajuste de tipo en esta línea: 'Radio: = (InputOptionPage como TRadioButton);'. Aquí está el código: 'Para CompIndex: = 0 a InputOptionPage.ComponentCount -1 do begin if (InputOptionPage es TRadioButton) luego begin Radio: = (InputOptionPage as TRadioButton); Radio.OnClick: = RadioButtonClick; \t final; final; ' – rossmcm

+0

... Desearía saber cómo puede formatear correctamente el código en los comentarios. Suspiro. – rossmcm

+0

Veo el error ... Eso es lo que obtengo por no compilar/probar el código. Observe la adición de .components [I] –

Cuestiones relacionadas