Grundlegendes zu Drag & Drop-Vorgängen

"Ziehen und Ablegen" bedeutet, die Computermaus-Taste gedrückt zu halten, während die Maus bewegt wird, und dann die Taste loszulassen, um das Objekt abzulegen. Delphi macht es einfach, Drag & Drop in Anwendungen zu programmieren.

Sie können wirklich von / zu ziehen und ablegen, wo immer Sie möchten, beispielsweise von einem Formular in ein anderes oder vom Windows Explorer in Ihre Anwendung.

Drag & Drop Beispiel

Starten Sie ein neues Projekt und fügen Sie ein Bildsteuerelement in ein Formular ein. Verwenden Sie den Objektinspektor, um ein Bild zu laden (Picture-Eigenschaft), und legen Sie dann die DragMode Eigentum an dmManual. Wir erstellen ein Programm, mit dem Sie eine TImage-Steuerelementlaufzeit mithilfe der Drag & Drop-Technik verschieben können.

DragMode

Komponenten ermöglichen zwei Arten des Ziehens: automatisch und manuell. Delphi verwendet die DragMode-Eigenschaft, um zu steuern, wann der Benutzer das Steuerelement ziehen kann. Der Standardwert dieser Eigenschaft ist dmManual. Dies bedeutet, dass das Ziehen von Komponenten in der Anwendung nur unter bestimmten Umständen zulässig ist, für die der entsprechende Code geschrieben werden muss. Unabhängig von der Einstellung für die DragMode-Eigenschaft wird die Komponente nur verschoben, wenn der richtige Code für die Neupositionierung geschrieben wurde.

OnDragDrop

Das Ereignis, das Drag & Drop erkennt, wird als OnDragDrop-Ereignis bezeichnet. Wir legen damit fest, was passieren soll, wenn der Benutzer ein Objekt fallen lässt. Wenn wir eine Komponente (ein Bild) an eine neue Position in einem Formular verschieben möchten, müssen wir daher Code für die OnDragDrop-Ereignisbehandlungsroutine des Formulars schreiben.

Der Source-Parameter des OnDragDrop-Ereignisses ist das Objekt, das gelöscht wird. Der Typ des Quellparameters ist TObject. Um auf seine Eigenschaften zugreifen zu können, müssen Sie es in den richtigen Komponententyp umwandeln, in diesem Beispiel TImage.

Akzeptieren

Wir müssen das OnDragOver-Ereignis des Formulars verwenden, um zu signalisieren, dass das Formular das TImage-Steuerelement akzeptieren kann, das wir darauf ablegen möchten. Obwohl der Accept-Parameter standardmäßig True ist, weist das Steuerelement das gezogene Objekt zurück, wenn kein OnDragOver-Ereignishandler angegeben ist (als ob der Accept-Parameter auf False geändert worden wäre)..

Führen Sie Ihr Projekt aus und ziehen Sie das Bild per Drag & Drop. Beachten Sie, dass das Bild an seiner ursprünglichen Position sichtbar bleibt, während sich der Mauszeiger bewegt. Die OnDragDrop-Prozedur kann nicht verwendet werden, um die Komponente während des Ziehens unsichtbar zu machen, da diese Prozedur erst aufgerufen wird, nachdem der Benutzer das Objekt abgelegt hat (falls überhaupt)..

DragCursor

Wenn Sie das beim Ziehen des Steuerelements angezeigte Cursorbild ändern möchten, verwenden Sie die DragCursor-Eigenschaft. Die möglichen Werte für die DragCursor-Eigenschaft sind dieselben wie für die Cursor-Eigenschaft. Sie können animierte Cursor oder beliebige Elemente verwenden, z. B. eine BMP-Bilddatei oder eine CUR-Cursordatei.

BeginDrag

Wenn DragMode dmAutomatic ist, beginnt das Ziehen automatisch, wenn wir eine Maustaste mit dem Cursor auf dem Steuerelement drücken. Wenn Sie den Wert der DragMode-Eigenschaft von TImage auf dem Standardwert von dmManual belassen haben, müssen Sie BeginDrag / EndDrag-Methoden verwenden, um das Ziehen der Komponente zu ermöglichen. Eine häufigere Methode zum Ziehen und Ablegen besteht darin, DragMode auf dmManual zu setzen und das Ziehen durch Behandeln von Ereignissen mit gedrückter Maustaste zu starten.

Jetzt werden wir die verwenden Strg + MouseDown Tastenkombination, um das Ziehen zu ermöglichen. Setzen Sie den DragMode von TImage wieder auf dmManual und schreiben Sie die MouseDown-Ereignisbehandlungsroutine wie folgt:

BeginDrag verwendet einen Booleschen Parameter. Wenn wir True übergeben (wie in diesem Code), beginnt das Ziehen sofort. Wenn False, startet es erst, wenn wir die Maus ein kurzes Stück bewegen. Denken Sie daran, dass hierfür die Strg-Taste erforderlich ist.