Vcl.Controls.TControl.OnMouseActivate
Delphi
property OnMouseActivate: TMouseActivateEvent read FOnMouseActivate write FOnMouseActivate;
C++
__property TMouseActivateEvent OnMouseActivate = {read=FOnMouseActivate, write=FOnMouseActivate};
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
event | protected | Vcl.Controls.pas Vcl.Controls.hpp |
Vcl.Controls | TControl |
Description
Se produit quand un utilisateur appuie sur un bouton de la souris alors que le pointeur se trouve sur un contrôle et que la fiche parent n'est pas active.
Utilisez le gestionnaire d'événements OnMouseActivate pour implémenter tout traitement spécial répondant à un clic sur un contrôle quand la fiche parent de niveau supérieur n'est pas active.
L'événement est de type :
TMouseActivateEvent = procedure (Sender: TObject; Button: TMouseButton; ShiftState: TShiftState; X, Y: Integer; HitTest: Integer; var MouseActivate: TMouseActivate) of object;
Quand vous cliquez sur un contrôle alors que la fiche parent de niveau supérieur n'est pas active, cet événement se déclenche sur le contrôle sur lequel se trouve le curseur. MouseActivate est une fonction virtuelle protégée dans TControl. MouseActivate peut être redéfinie dans les descendants de contrôles personnalisés pour fournir un traitement intégré spécial des événements OnMouseActivate. Si vous conservez la valeur par défaut de MouseActivate (c'est-à-dire maDefault
), le contrôle parent déclenche l'événement OnMouseActivate et répète le processus jusqu'à la fiche de niveau supérieur. Si aucun contrôle dans la chaîne ne définit la valeur de MouseActivate, le comportement est le même que lorsque TMouseActivate a la valeur maActivate
. Un contrôle peut, à tout moment, définir la valeur de TMouseActivate et le traitement parent s'arrête.
Comme certains contrôles s'attribuent la focalisation à eux-mêmes quand ils reçoivent un message concernant un bouton enfoncé, il peut arriver que l'affectation de la valeur maNoActivate ne semble avoir aucun effet. Par exemple, un contrôle TButton s'attribue la focalisation dans le message WM_LBUTTONDOWN, et ce que TMouseActivate ait ou non la valeur maNoActivate. Dans ce cas, la valeur maNoActivateAndEat fonctionnera car la fiche de niveau supérieur n'est pas activée et le message WM_LBUTTONDOWN est supprimé.
Le paramètre HitTest représente la valeur de test des clics obtenue du message WM_NCHITTEST. Consultez le fichier Windows.pas pour connaître les valeurs possibles et leur signification. Dans la majorité des cas, cette valeur sera HTCLIENT, c'est-à-dire que l'utilisateur a cliqué dans la zone client d'un contrôle. En revanche, dans le cas d'une fiche de niveau supérieur, ce paramètre peut avoir d'autres valeurs (comme HTCAPTION) basées sur le code HitTest. Par exemple, le code suivant d'un gestionnaire d'événements OnMouseActivate d'un TForm force l'utilisateur à cliquer dans une zone non client pour activer la fiche :
if HitTest = HTCLIENT then MouseActivate := maNoActivateAndEat;
Même si cet événement est lié à la façon dont Windows traite WM_MOUSEACTIVATE, la gestion réelle du message est réalisée au niveau de TControl, qui représente, dans la hiérarchie VCL, le point auquel le contrôle n'a pas de handle de fenêtre. L'événement OnMouseActivate est ensuite simulé puisque tous les descendants de TControl ont aussi des événements OnMouseDown, OnMouseMove et OnMouseUp. Ces informations concernent aussi bien VCL Win32 que VCL.NET.