Début de l'opération glisser

De RAD Studio
Aller à : navigation, rechercher

Remonter à Manipulation des contrôles - Index

Chaque contrôle possède une propriété appelée DragMode qui détermine la façon dont les opérations glisser sont démarrées. Si la propriété DragMode est à dmAutomatic, l'opération glisser commence automatiquement quand l'utilisateur clique sur le bouton de la souris alors que le curseur se trouve au-dessus d'un contrôle. Puisque dmAutomatic peut interférer avec une activité de souris normale, vous donnerez à DragMode la valeur dmManual (valeur par défaut) et lancerez l'opération glisser en gérant les événements bouton de souris enfoncé.

Pour faire glisser un contrôle manuellement, appelez la méthode BeginDrag du contrôle. BeginDrag requiert un paramètre booléen appelé Immediate et, éventuellement, un paramètre entier appelé Threshold. Si vous transmettez True pour Immediate, l'opération glisser commence immédiatement. Si vous transmettez False, l'opération glisser ne commence pas avant que l'utilisateur ne déplace la souris du nombre de pixels spécifié par Threshold. Appeler



 BeginDrag (False);



 false, -1



permet au contrôle d'accepter les clics de la souris sans lancer une opération glisser.

Vous pouvez imposer des conditions pour commencer l'opération glisser, par exemple vérifier le bouton de souris enfoncé par l'utilisateur, en testant les paramètres du gestionnaire de l'événement bouton de souris enfoncé, avant l'appel à BeginDrag. Le code qui suit, par exemple, gère l'événement bouton de souris enfoncé dans une boîte liste de fichiers en ne lançant l'opération glisser que si le bouton gauche de la souris a été enfoncé.



 procedure TFMForm.FileListBox1MouseDown(Sender: TObject;
   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 begin
   if Button = mbLeft then  { ne glisser que si le bouton gauche est enfoncé }
     with Sender as TFileListBox do  { traiter Sender comme TFileListBox }
       begin
         if ItemAtPos(Point(X, Y), True) >= 0 then  { y a-t-il un élément ici ? }
           BeginDrag(False);  { si tel est le cas, le faire glisser }
     end;
 end;



 void __fastcall TFMForm::FileListBox1MouseDown(TObject *Sender,
 {
   if (Button == mbLeft)
   {
     TFileListBox *pLB = dynamic_cast<TFileListBox *>(Sender); // transtypage en TFileListBox
     if (pLB && pLB->ItemAtPos(Point(X,Y), true) >= 0) // y a-t-il un élément ici ?
       pLB->BeginDrag(false, -1);                   // si tel est le cas, le faire glisser
   }
 }



Voir aussi