Le contrôle Delphi TCheckBox affiche une case à cocher qui peut être activée (cochée) ou désactivée (non cochée). le Propriété vérifiée spécifie si la case est cochée ou non.
Lorsque l'utilisateur clique sur la case à cocher pour modifier son état Vérifié, l'événement OnClick de la case à cocher est déclenché.
Puisqu'il n'y a pas OnCheckedChanged , vous gérerez probablement la logique du programme en fonction de l'état coché de la case à cocher dans son événement OnClick.
Cependant, si vous modifier par programmation la propriété Checked, l'événement OnClick sera déclenché -- même si aucune interaction utilisateur n'a eu lieu.
Il existe (au moins) deux façons de modifier par programme la propriété cochée de la case à cocher tout en «désactivant» l'événement OnClick.
Dans Delphi pour Win32, un événement ne peut être associé qu'à un seul gestionnaire d'événements (procédure) (même s'il existe un moyen d'imiter des événements de multidiffusion dans Delphi pour Win32). La signature de l'événement OnClick d'un contrôle TCheckBox est "type TNotifyEvent = procedure (Sender: TObject) of object;"
Si vous affectez NIL à l'événement OnClick avant de modifier l'état de la case à cocher, puis revenez à la procédure de gestion des événements OnClick d'origine - l'événement OnClick ne sera pas déclenché.
procédure SetCheckedState (const checkBox: TCheckBox; const vérifier: booléen);
var
onClickHandler: TNotifyEvent;
commencer
avec checkBox faire
commencer
onClickHandler: = OnClick;
OnClick: = néant;
fin;
fin;
L'utilisation de cette procédure est simple:
// bascule l'état vérifiécommencer
SetCheckedState (CheckBox1, NOT CheckBox1.Checked);
fin;
Le SetCheckedState ci-dessus bascule la propriété Checked de la case à cocher CheckBox1.
Une autre façon d'arrêter l'exécution d'OnClick, lorsque vous modifiez par programme la propriété Checked d'une case à cocher, consiste à tirer parti du "caché" (protégé) Clics désactivés propriété.
En regardant la procédure SetState de TCheckBox qui est exécutée chaque fois que la propriété Checked change, le OnClick est déclenché si ClicksDisabled n'est pas vrai.
Étant donné que ClicksDisabled est protégé, vous ne pouvez pas y accéder à partir de votre code.
Heureusement, la technique de piratage protégé vous permet d'accéder à ces propriétés cachées / protégées d'un contrôle Delphi.