Contrôle de l'ancrage des contrôles enfant
Remonter à Implémentation du glisser-ancrer dans les contrôles
Un site d'ancrage accepte automatiquement les contrôles enfant lorsqu'ils sont libérés au-dessus de lui. Pour la plupart des contrôles, le premier enfant est ancré pour remplir la zone client, le deuxième divise cette dernière en différentes régions, et ainsi de suite. Les contrôles de page ancrent les enfants dans de nouvelles feuilles à onglets (ou fusionnent dans des feuilles à onglets si l'enfant est un autre contrôle de page).
Trois événements permettent aux sites d'influer sur l'ancrage des contrôles enfant :
property OnGetSiteInfo: TGetSiteInfoEvent;
TGetSiteInfoEvent = procedure(Sender: TObject; DockClient: TControl; var InfluenceRect: TRect; var CanDock: Boolean) of object;
__property TGetSiteInfoEvent OnGetSiteInfo = {read=FOnGetSiteInfo, write=FOnGetSiteInfo};
typedef void __fastcall (__closure *TGetSiteInfoEvent)(System::TObject* Sender, TControl* DockClient, Windows::TRect &InfluenceRect, const Windows::TPoint &MousePos, bool &CanDock);
OnGetSiteInfo intervient sur le site d'ancrage lorsque l'utilisateur fait glisser un enfant ancrable sur le contrôle. Il permet au site d'indiquer s'il accepte en tant qu'enfant le contrôle spécifié par le paramètre DockClient et, si tel est le cas, où l'enfant doit se trouver en vue de son ancrage. Lorsque OnGetSiteInfo intervient, InfluenceRect est initialisée selon les coordonnées d'écran du site d'ancrage et CanDock est intialisée à True. Une région d'ancrage plus limitée peut être créée en changeant InfluenceRect et l'enfant peut être rejeté en mettant CanDock à False.
property OnDockOver: TDockOverEvent;
TDockOverEvent = procedure(Sender: TObject; Source: TDragDockObject; X, Y: Integer; State: TDragState; var Accept: Boolean) of object;
__property TDockOverEvent OnDockOver = {read=FOnDockOver, write=FOnDockOver};
typedef void __fastcall (__closure *TDockOverEvent)(System::TObject* Sender, TDragDockObject* Source, int X, int Y, TDragState State, bool &Accept);
OnDockOver intervient sur le site d'ancrage lorsque l'utilisateur fait glisser un enfant ancrable sur le contrôle. Il est analogue à l'événement OnDragOver au cours d'une opération normale de glisser-déposer. Utilisez-le pour indiquer que l'enfant peut être relâché en vue de son ancrage, en initialisant la propriété Accept. Si le contrôle ancrable est rejeté par le gestionnaire d'événement OnGetSiteInfo (par exemple, si le type de contrôle est incorrect), OnDockOver ne se produit pas.
property OnDockDrop: TDockDropEvent;
TDockDropEvent = procedure(Sender: TObject; Source: TDragDockObject; X, Y: Integer) of object;
__property TDockDropEvent OnDockDrop = {read=FOnDockDrop, write=FOnDockDrop}; typedef void __fastcall (__closure *TDockDropEvent)(System::TObject* Sender, TDragDockObject* Source, int X, int Y);
OnDockDrop intervient sur le site d'ancrage lorsque l'utilisateur relâche l'enfant ancrable sur le contrôle. Il est analogue à l'événement OnDragDrop au cours d'une opération normale de glisser-déposer. Utilisez-le pour faire en sorte d'accepter le contrôle en tant que contrôle enfant. L'accès au contrôle enfant peut être obtenu à l'aide de la propriété Control de TDockObject spécifié par le paramètre Source.