Eine Drag-Operation beginnen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Mit Steuerelementen arbeiten - Index

Jedes Steuerelement verfügt über die Eigenschaft DragMode. Diese Eigenschaft bestimmt, wie Drag-Operationen eingeleitet werden. Hat DragMode den Wert dmAutomatic, beginnt die Drag-Operation automatisch, sobald der Benutzer innerhalb der Komponente eine Maustaste drückt. Da diese Einstellung zu Konflikten mit normalen Mausaktivitäten führen kann, sollten Sie DragMode auf den Standardwert dmManual setzen und die Drag-Operation in einer Ereignisbehandlungsroutine für OnMouseDown starten.

Sie können die Drag-Operation manuell starten, indem Sie die Methode BeginDrag der Komponente aufrufen. An BeginDrag wird der Boolesche Parameter Immediate und ein Ganzzahlparameter namens Treshold übergeben. Hat er den Wert True, beginnt die Operation sofort. Wenn Sie den Wert False übergeben, wird die Drag-Operation erst gestartet, wenn der Benutzer die Maus um die Anzahl von Pixel bewegt, die in Treshold angegeben wurden. Der Aufruf



 BeginDrag (False);



 false, -1



ermöglicht Mausklicks, ohne eine Drag-Operation zu starten.

Eine Drag-Operation kann auch von Bedingungen abhängig gemacht werden. Sie können beispielsweise prüfen, welche Maustaste gedrückt wurde, indem Sie vor dem Aufruf von BeginDrag die Parameter des OnMouseDown-Ereignisses auswerten. Im folgenden Beispiel wird in der OnMouseDown-Ereignisbehandlungsroutine einer Dateiliste eine Drag-Operation nur gestartet, wenn die linke Maustaste gedrückt worden ist:



 procedure TFMForm.FileListBox1MouseDown(Sender: TObject;
   Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
 begin
   if Button = mbLeft then  { Drag-Operation nur starten, wenn linke Maustaste gedrückt wird }
     with Sender as TFileListBox do  { Sender als TFileListBox behandeln }
       begin
         if ItemAtPos(Point(X, Y), True) >= 0 then { Ist ein Element vorhanden? }
           BeginDrag(False);  { Falls ja, Drag-Operation starten }
     end;
 end;



 void __fastcall TFMForm::FileListBox1MouseDown(TObject *Sender,
 {
   if (Button == mbLeft)
   {
     TFileListBox *pLB = dynamic_cast<TFileListBox *>(Sender); // in TFileListBox umwandeln
     if (pLB && pLB->ItemAtPos(Point(X,Y), true) >= 0) // Ist ein Element vorhanden?
       pLB->BeginDrag(false, -1);                   // Falls ja, Drag-Operation starten
   }
 }



Siehe auch