2010-02-15 24 views

Respuesta

7

Usted podría rodear el código de evento de clic con algo como

if myFlag then 
    begin 
    ...event code... 
    end; 

Si no desea que sea ejecutado, establece myFlag false y después del cambio del estado casilla de verificación puso de nuevo a la verdadera.

+0

sí ...: -S eso es realmente fácil. No sé por qué no lo hice yo mismo> _ < – Cynede

6

Espero que haya una solución de botón pero podría almacenar el evento actual en una var. TNotifyEvent, luego establecer Checkbox.OnChecked en cero y luego restaurarlo.

+0

CheckBox-> Checked = false está en el botón pero incluso llama al evento ClickClick. Entonces lo intentaré. Gracias. – Cynede

9

Otra opción es cambiar la propiedad ClicksDisable protegida mediante una clase de interposición de esta manera:

type 
    THackCheckBox = class(TCustomCheckBox) 
    end; 

procedure TCheckBox_SetCheckedNoOnClick(_Chk: TCustomCheckBox; _Checked: boolean); 
var 
    Chk: THackCheckBox; 
begin 
    Chk := THackCheckBox(_Chk); 
    Chk.ClicksDisabled := true; 
    try 
    Chk.Checked := _Checked; 
    finally 
    Chk.ClicksDisabled := false; 
    end; 
end; 
+0

+1 para ClicksDisponible – yonojoy

0

CheckBox.State := cbUnchecked; obras en Delphi, esto no se dispara onClickEvent yo sepa

+0

No funcionó para mí. – Noumenon

6

En las nuevas versiones de Delphi que puede utilizar ayudantes de clase para agregar esta funcionalidad:

CheckBox.SetCheckedWithoutClick(False); 

utilizando la siguiente clase auxiliar para un VCL TCheckBox:

TCheckBoxHelper = class helper for TCheckBox 
    procedure SetCheckedWithoutClick(AChecked: Boolean); 
end; 

procedure TCheckBoxHelper.SetCheckedWithoutClick(AChecked: Boolean); 
begin 
    ClicksDisabled := True; 
    try 
     Checked := AChecked; 
    finally 
     ClicksDisabled := False; 
    end; 
end; 

simplemente para la corrección: Un FMX TCheckBox se comportará similar (activación OnChange). Puede solucionar esto usando la siguiente clase auxiliar:

TCheckBoxHelper = class helper for TCheckBox 
    procedure SetCheckedWithoutClick(AChecked: Boolean); 
end; 

procedure TCheckBoxHelper.SetCheckedWithoutClick(AChecked: Boolean); 
var 
    BckEvent: TNotifyEvent; 
begin 
    BckEvent := OnChange; 
    OnChange := nil; 
    try 
     IsChecked := AChecked; 
    finally 
     OnChange := BckEvent; 
    end; 
end; 

responsabilidad: Gracias, dummzeuch de la idea original. Tenga en cuenta los consejos habituales sobre los ayudantes de clase.

+0

¡Es justo lo que estaba buscando! Gracias – KryNaC

2

tratan de esta manera:

Checkbox.OnClick := nil; 
try 
    Checkbox.Checked := yourFlag; 
finally 
    Checkbox.OnClick := CheckboxClick; 
end; 
-1

solución simple es poner su código en el evento onclick onmouseup;

Cuestiones relacionadas