Establecer CheckBox. Marcado sin el evento OnClick

El TCheckBox Delphi El control muestra una casilla de verificación que puede estar activada (activada) o desactivada (desactivada). los Propiedad marcada especifica si la casilla de verificación está marcada o no.

Cuando el usuario hace clic en la casilla de verificación para cambiar su estado marcado, se activa el evento OnClick para la casilla de verificación.

Cambio de la propiedad marcada de la casilla de verificación

Como no hay OnCheckedChanged evento, probablemente manejará la lógica del programa dependiendo del estado marcado de la casilla de verificación en su evento OnClick.

Sin embargo, si tu cambie programáticamente la propiedad marcada, se activará el evento OnClick - a pesar de que no hubo interacción del usuario.

Hay (al menos) dos formas de cambiar mediante programación la propiedad marcada de la casilla de verificación mientras se "deshabilita" el evento OnClick.

Eliminar el controlador de OnClick, cambiar marcado, volver a colocar el controlador original de OnClick

En Delphi para Win32, un evento puede tener solo un controlador de eventos (procedimiento) adjunto (aunque hay una manera de imitar eventos de multidifusión en Delphi para Win32). La firma del evento OnClick de un control TCheckBox es "type TNotifyEvent = procedure (Sender: TObject) of object;"

instagram viewer

Si asigna NIL al evento OnClick antes de cambiar el estado de la casilla de verificación, vuelva al procedimiento original de manejo del evento OnClick; el evento OnClick no se activará.

procedimiento SetCheckedState (const checkBox: TCheckBox; const verificación: booleano);

var

 onClickHandler: TNotifyEvent;

empezar

con caja hacer

empezar

 onClickHandler: = OnClick;

 OnClick: = nulo;

Comprobado: = comprobar;
OnClick: = onClickHandler;
final;

final; 

El uso de este procedimiento es simple:

// alternar estado marcadoempezar

 SetCheckedState (CheckBox1, NOT CheckBox1.Checked);

final;

El SetCheckedState anterior alterna la propiedad Checked de la casilla de verificación CheckBox1.

Hack protegido: ClicksDisabled: = true

Otra forma de detener la ejecución de OnClick, cuando cambia programáticamente la propiedad marcada de una casilla de verificación, es aprovechar el "oculto" (protegido) Clics deshabilitados propiedad.

Al observar el procedimiento SetState de TCheckBox que se ejecuta cada vez que cambia la propiedad Checked, se activa OnClick si ClicksDisabled no es cierto.

Dado que ClicksDisabled está protegido, no puede acceder desde su código.

Afortunadamente, la técnica de pirateo protegido le permite acceder a esas propiedades ocultas / protegidas de un control Delphi.

El acceso a los miembros protegidos de un componente proporciona más información sobre el tema.

Lo que debe hacer es declarar una clase ficticia simple que extienda TCheckBox en la misma unidad donde utilizará la propiedad ClicksDisabled.

Una vez que tenga en sus manos el ClicksDisabled, simplemente configúrelo en true, cambie la propiedad Checked, luego configure ClicksDisabled nuevamente en false (valor predeterminado):

tipo


 TCheckBoxEx = clase (TCheckBox);


 ...


con TCheckBoxEx (CheckBox1) dobegin

 ClicksDisabled: = true;

 Marcado: = NO marcado;

 ClicksDisabled: = false;

final;

Nota: el código anterior alterna la propiedad marcada de la casilla de verificación llamada "CheckBox1" utilizando la propiedad protegida ClicksDisabled.

Creación de aplicaciones con Delphi

  • Guía para principiantes de programación de bases de datos de Delphi
  • Integrando Gráficos Básicos en Aplicaciones Delphi
  • Cómo mover y cambiar el tamaño de los controles en tiempo de ejecución
  • Consultas de bases de datos Delphi multiproceso
instagram story viewer