Einführung in Drag and Drop

4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 11 (Geändert)


4D ermöglicht, Objekte in Ihren Formularen per Drag&Drop-Technik zu bewegen. Sie können ein Objekt in ein anderes bewegen, egal ob es im gleichen oder einem anderen Fenster liegt. Drag&Drop ist also innerhalb eines Prozesses oder von einem Prozess zum nächsten möglich.

Sie können jetzt Objekte per Drag&Drop zwischen 4D Formularen und anderen Anwendungen bzw. dem Desktop des Betriebssystems bewegen, und umgekehrt. Es ist z.B. möglich, ein GIF-Bild per Drag&Drop in ein 4D Datenfeld vom Typ Bild zu ziehen. Sie können auch Text in einem Textverarbeitungsprogramm auswählen und in eine 4D Variable vom Typ Text ziehen.

Sie können Objekte direkt in die 4D Anwendung ziehen. Dafür muss kein Formular im Vordergrund sein. In diesem Fall können Sie die Datenbankmethode On Drop zum Steuern der Drag&Drop Aktion verwenden. Sie können z.B. ein 4D Write Dokument öffnen, indem Sie es auf das 4D Programm-Icon ziehen.

Hinweis: Zu Beginn gehen wir davon aus, dass eine Drag&Drop Aktion Daten von einem Punkt zu einem anderen "transportiert". Später sehen wir dann, dass Drag&Drop auch als Metapher für jede Art von Operation dienen kann.

Objekteigenschaften Dragfähig und Dropfähig


Aktive Objekte in einem Formular können Drag&Drop-Eigenschaften aufweisen, d.h. sie können mit gedrückter Maustaste bewegt werden. Diese Eigenschaften legen Sie in der Eigenschaftenliste fest.

Dragfähig bedeutet, dass der Benutzer das Objekt bei gedrückter Maustaste ziehen kann. Das gezogene Objekt ist das Quellobjekt.

Dropfähig bedeutet, dass das Objekt ein bei gedrückter Maustaste gezogenes Objekt aufnehmen kann. Das empfangende Objekt ist das Zielobjekt.

Automatisches Drag und Automatisches Drop: Diese zusätzlichen Eigenschaften sind für Textfelder und Variablen sowie Combo Boxen und Listboxen verfügbar. Automatisches Drop ist auch für Felder vom Typ Bild und Variablen möglich. Damit können Sie einen automatischen Drag and Drop Modus aktivieren, der auf Kopieren des Inhalts basiert. (Die Drag and Drop Aktion wird nicht mehr über 4D Formularereignisse verwaltet). Weitere Informationen siehe unten im Abschnitt "Automatisches Drag and Drop".

Neu erstellte Objekte haben keine Drag&Drop-Eigenschaften. Sie entscheiden selbst, ob Sie diese Eigenschaften zuweisen.

Die Drag&Drop-Technik ist möglich für alle Objekte in einem Eingabeformular, für eigene Elemente in einem Array, z.B. rollbarer Bereich, Einträge einer hierarchischen Liste oder Zeilen einer Listbox. Sie können umgekehrt auch ein Objekt per Drag&Drop in ein eigenes Element eines Arrays, in einen Eintrag einer hierarchischen Liste oder in Zeilen einer Listbox bewegen. Sie können dagegen nicht Objekte aus einem Detail-Bereich eines Ausgabeformulars per Drag&Drop bewegen.

Da 4D jede Art von aktivem Objekt (Datenfeld oder Variable) als Quell- oder Zielobjekt zulässt, lässt sich eine drag- und dropfähige Benutzeroberfläche schnell und problemlos erstellen. So können Sie beispielsweise eine Schaltfläche per Drag&Drop bewegen.

Hinweise:

Um einen Text oder eine Schaltfläche mit dem Attribut "dragfähig" zu ziehen, müssen Sie zuerst unter Windows die Alt-Taste, auf Macintosh die Wahltaste drücken.

Bei Bildvariablen und -feldern werden standardmäßig das Bild und seine Referenz übertragen. Wollen Sie nur die Referenz übertragen, drücken Sie während der Operation unter Windows die Alt-Taste, auf Mac OS die Wahltaste.

Gibt es für ein Objekt vom Typ Listbox die Eigenschaften "dragfähig" und "verschiebbare Zeilen", hat die Eigenschaft "verschiebbare Zeilen" Vorrang, wenn eine Zeile bewegt wird. In diesem Fall ist keine Drag-Aktion möglich.

Ein Objekt, das sowohl drag- als auch dropfähig ist, lässt sich auch auf sich selbst ziehen, außer Sie schließen diese Operation aus. Weitere Informationen dazu finden Sie in den folgenden Abschnitten.

Folgendes Bild zeigt die Eigenschaftenliste mit den markierten Eigenschaften dropfähig bzw. dragfähig für die ausgewählten Objekte:

Drag&Drop Handling per Programmierung


4D stellt drei Formularereignisse zur Verfügung: On Begin Drag Over, On Drag Over und On Drop. Beachten Sie, dass On Begin Drag Over im Kontext des Quellobjekts der Drag Aktion generiert wird, während On Drag Over und On Drop nur zum Zielobjekt gesendet werden.

Das Programm kann diese Ereignisse nur ausführen, wenn sie in der Eigenschaftenliste entsprechend aktiviert wurden:

On Begin Drag Over

Das Formularereignis On Begin Drag Over lässt sich für jedes dragfähige Formularobjekt wählen und wird immer erzeugt, wenn das Objekt die Eigenschaft dragfähig hat.

Im Gegensatz zumFormularereignis On Drag Over wird On Begin Drag Over im Quellobjekt der Drag Aktion aufgerufen, entweder in der Methode oder in der Formularmethode des Quellobjekts

Dieses Ereignis dient zur erweiterten Verwaltung der Drag-Aktion. Sie können damit folgendes ausführen:

Die Daten und Signaturen aus der Zwischenablage (Pasteboard) erhalten (über den Befehl GET PASTEBOARD DATA).

Daten und Signaturen in die Zwischenablage (Pasteboard) legen (über den Befehl APPEND DATA TO PASTEBOARD).

Über $0 in der Methode des zu ziehenden Objekts Drag erlauben oder verweigern: Um anzuzeigen, dass Drag Aktionen erlaubt sind, muss die Methode des Quellobjekts 0 (Null) zurückgeben, Sie müssen also $0=0 ausführen. Um anzuzeigen, dass Drag Aktionen verweigert werden, muss die Methode des Quellobjekts -1 zurückgeben, Sie müssen also $0=-1 ausführen. Wird kein Ergebnis zurückgegeben, geht 4D davon aus, dass Drag Aktionen akzeptiert werden.

4D Daten werden vor Aufrufen des Ereignisses in die Zwischenablage (pasteboard) gelegt. Wird z.B. Drag ohne die Option Automatisches Drag ausgeführt, liegt der gezogene Text bereits in der Zwischenablage, wenn das Ereignis aufgerufen wird.

On Drag Over

Das Ereignis On Drag Over wird immer zum Zielobjekt gesendet, wenn der Mauszeiger über das Objekt bewegt wird. Als Antwort auf dieses Ereignis:

Rufen Sie den Befehl DRAG AND DROP PROPERTIES auf, der Sie über das Quellobjekt informiert.

Bestätigen oder Annullieren Sie Drag&Drop je nach Natur und Typ von Zielobjekt (dessen Objektmethode gerade ausgeführt wird) und Quellobjekt.

Zum Bestätigen von Drag muss die Methode des Zielobjekts 0 (Null) zurückgeben. Sie schreiben also $0:=0. Zum Annullieren von Drag muss die Methode des Zielobjekts -1 (minus eins) zurückgeben. Sie schreiben also $0:=-1. Während einem Ereignis On Drag Over behandelt 4D die Objektmethode wie eine Funktion. Wird kein Ergebnis zurückgegeben, nimmt 4D an, dass Drag akzeptiert wird.

Bei Bestätigen von Drag wird das Zielobjekt markiert, bei Annullieren von Drag wird das Zielobjekt nicht markiert. Bestätigen von Drag bedeutet jedoch nicht, dass die bewegten Daten in das Zielobjekt gesetzt werden. Es bedeutet lediglich, dass bei Loslassen der Maustaste an dieser Stelle das Zielobjekt die bewegten Daten aufnehmen würde.

Legen Sie für ein dropfähiges Objekt kein Ereignis On Drag Over fest, wird dieses Objekt für alle "drag over" Operationen markiert, egal welcher Art die bewegten Daten sind.

Mit dem Ereignis On Drag Over können Sie die erste Phase einer Drag&Drop Operation steuern. Sie können einerseits testen, ob die bewegten Daten mit dem Zielobjekt kompatibel sind und dann Drag bestätigen oder annullieren. Sie können andererseits auch den Benutzer darüber informieren, denn – je nach Ihrer Entscheidung – wird das Zielobjekt markiert oder nicht markiert.

Das Code-handling für ein Ereignis On Drag Over sollte kurz sein und schnell ausgeführt werden, da dieses Ereignis bei jeder Mausbewegung erneut an das aktuelle Zielobjekt gesendet wird.

WARNUNG: Bei einer Drag&Drop Operation auf Interprozessebene wird die Objektmethode des Zielobjekts für ein Ereignis On Drag Over im Kontext des Quellprozesses und nicht im Prozess des Zielobjektes ausgeführt, da Quellobjekt und Zielobjekt in verschiedenen Prozessen (Fenstern) liegen. Solch eine Ausführung erfolgt nur in diesem speziellen Fall. Die Vorteile werden am Ende des Abschnitts beschrieben.

On Drop

Das Ereignis On Drop wird an das Zielobjekt gesendet, wenn der Mauszeiger auf das Objekt losgelassen wird. Dieses Ereignis ist die zweite Phase der Drag&Drop Operation. Sie wird als Folge der Benutzeraktion ausgeführt.

Dieses Ereignis wird nur an das Objekt gesendet, wenn Drag während den Ereignissen On Drag Over bestätigt wurde. Führen Sie für ein Objekt das Ereignis On Drag Over aus und weisen Drag zurück, tritt das Ereignis On Drop nicht ein. Haben Sie also während dem Ereignis On Drag Over bereits die Kompatibilität der Daten zwischen Quell- und Zielobjekten getestet und ein mögliches Drag bestätigt, müssen Sie die Daten während des Ereignisses On Drop nicht erneut testen. Sie wissen bereits, dass die Daten für das Zielobjekt geeignet sind.

Ein interessanter Aspekt bei der Integration von Drag&Drop ist, dass 4D Ihnen freie Hand lässt. Beispiele:

Beim Bewegen eines Items aus einer hierarchischen Liste bestimmen Sie selbst, ob er am Anfang, Ende und in der Mitte des Textfeldes eingefügt wird.

Ihr Formular enthält eine Bildschaltfläche mit zwei unterschiedlichen Bildern, das kann z.B. ein voller oder ein leerer Papierkorb sein. Bewegen Sie ein Objekt in diese Schaltfläche, kann das aus der Sichtweise des Benutzers bedeuten "lösche das per Drag&Drop Technik in den Papierkorb gelegte Objekt." Hier transportiert Drag&Drop nicht Daten von einem Punkt zu einem anderen; sondern führt stattdessen eine Aktion aus.

Bewegen Sie ein Array-Element von einem Palettenfenster in ein Formularobjekt, kann das bedeuten "Zeige in diesem Fenster den Kundendatensatz, dessen Namen Sie gerade per Drag&Drop Technik aus dem Palettenfenster entnommen haben, welches die in der Datenbank gespeicherten Kunden anzeigt."

Usw.

Die Drag&Drop Oberfläche ist ein Komplex, mit dem Sie jede Metapher in der Benutzeroberfläche integrieren können.

Drag&Drop Befehle


Der Befehl DRAG AND DROP PROPERTIES gibt folgendes zurück:

Einen Zeiger auf das bewegte Objekt (Datenfeld oder Variable)

Die Element- oder Itemnummer, wenn das gezogene Objekt ein Array-Element oder Eintrag einer Liste ist.

Die Prozessnummer des Quellprozesses

Die Funktion Drop position gibt die Elementnummer des Array oder die Position des Eintrags in der Liste zurück, wenn das Zielobjekt ein Array (z.B. rollbarer Bereich), eine hierarchische Liste, Text oder eine Combo Box ist, sowie die Spaltennummer, wenn das Objekt eine Listbox ist.

Mit RESOLVE POINTER und Type testen Sie Natur und Typ des Quellobjektes.

Soll die Drag&Drop Operation gezogene Daten kopieren, richtet sich die Funktionalität dieser Befehle nach der Anzahl der beteiligten Prozesse:

Ist Drag&Drop auf einen Prozess beschränkt, führen Sie mit diesen Befehlen die geeigneten Aktionen aus, z.B. dem Zielobjekt das Quellobjekt zuweisen.

Bei Drag&Drop auf Interprozessebene ist beim Zugreifen auf gezogene Daten Vorsicht geboten. Sie müssen vom Quellprozess aus auf die Daten zugreifen. Stammen die gezogenen Daten aus einer Variablen, verwenden Sie den Befehl GET PROCESS VARIABLE, um den richtigen Wert zu erhalten. Stammen die gezogenen Daten aus einem Datenfeld, beachten Sie, dass der aktuelle Datensatz für eine Tabelle für beide Prozesse unterschiedlich sein kann. Sie müssen auf den richtigen Datensatz zugreifen.

Für den letzten Fall gibt es verschiedene Lösungen:

Wird das Ereignis On Drag Over für eine Methode des Zielobjekts im Kontext eines Quellprozesses ausgeführt, können Sie die Daten des Datenfeldes bzw. die Datensatznummer in eine Interprozessvariable kopieren, die während dem Ereignis On Drop wiederverwendet wird.

Sie erhalten die erforderlichen Daten, wenn Sie während dem Ereignis On Drop eine Interprozesskommunikation starten.

Soll die Drag&Drop Operation keine Daten bewegen, sondern ist sie vielmehr eine Metapher in der Benutzeroberfläche für eine spezifische Operation, können Sie ausführen, was immer Sie möchten.

"Pasteboard" Befehle verwenden

Verwenden Sie die Drag&Drop Technik, um heterogene Daten oder Dokumente zwischen zwei 4D Anwendungen oder einer 4D Anwendung und einer Anwendung von Drittherstellern zu übertragen, lieferndie Befehle im Kapitel "Pasteboard" die erforderlichen Werkzeuge. Sie verwenden zwei Übertragungsbereiche (pasteboards) für die Daten: Einen für kopierte oder ausgeschnittene Daten (Zwischenablage); den anderen für Daten, die per Drag&Drop-Technik bewegt werden (Pasteboard). Beide Übertragungsbereiche verwenden dieselben Befehle. Je nach Kontext greifen Sie auf die Zwischenablage oder Pasteboard zu.

Weitere Informationen dazu finden Sie im Abschnitt Pasteboards verwalten.

Automatisches Drag and Drop


Textbereiche (Felder, Variablen, Combo Boxen und Listboxen) sowie Objekte vom Typ Bild ermöglichen automatisches Drag and Drop, d.h. Verschieben oder Kopieren einer Text- oder Bildauswahl von einem Bereich in einen anderen durch einen Klick. Diese Operation lässt sich im gleichen 4D Bereich, zwischen zwei verschiedenen 4D Bereichen oder zwischen 4D und einer anderen Anwendung, z.B. WordPad verwenden.

Bei automatischem Drag and Drop zwischen zwei 4D Bereichen werden die Daten verschoben, d.h. sie werden aus dem Quellbereich entfernt. Wollen Sie die Daten nur kopieren, halten Sie während der Aktion unter Windows die Alt-Taste, auf Mac OS die Wahltaste gedrückt.

Automatisches Drag&Drop lässt sich für jedes Formularobjekt separat konfigurieren. Dazu stehen in der Eigenschaftenliste die beiden Optionen Automatisches Drag und Automatisches Drop zur Verfügung.

Automatisches Drag: Ist diese Option markiert, wird der automatische Drag-Modus aktiviert. Dieser Modus ist vorrangig, auch wenn die Option Dragfähig markiert ist. Das Formularereignis On Begin Drag wird nicht generiert.

Wollen Sie das standardmäßige Drag erzwingen, drücken Sie während der Aktion unter Windows die Alt-Taste, auf Mac OS die Wahltaste.

Automatisches Drop: Diese Option aktiviert den automatischen Drop-Modus. In diesem Modus verwaltet 4D automatisch das Einfügen bewegter Daten vom Typ Text oder Bild, die auf das Objekt gezogen wurden (die Daten werden in das Objekt kopiert). In diesem Fall werden die Formularereignisse On Drag Over und On Drop nicht erzeugt. Die Ereignisse On After Edit (während einen Drop) und On Data Change (wenn ein Objekt Fokus verliert) werden dagegen erzeugt.

Bei per Drop bewegten Daten, die nicht vom Typ Text oder Bild sind, also z.B. ein anderes 4D Objekt, eine andere Datei, oder bei komplexen Daten, richtet sich die Anwendung nach der Option Dropfähig: Ist sie markiert, werden die Formularereignisse On Drag Over und On Drop erzeugt. Ist sie nicht markiert, wird Drop verweigert. Dabei spielt auch die Option Drag&Drop von außerhalb von 4D verweigern eine Rolle.

Drag&Drop von außerhalb von 4D verweigern (Kompatibilität)

4D erlaubt ab Version 11 Drag&Drop für Auswahlen, Objekte bzw. externe Dateien in 4D, z.B. eine Bilddatei. Der Code der Datenbank muss diese Möglichkeit unterstützen.

Diese Möglichkeit kann jedoch die Funktionsweise für Datenbanken beeinträchtigen, die aus früheren 4D Versionen konvertiert wurden, wenn der vorhandene Code nicht entsprechend angepasst wird. Dafür gibt es in den Einstellungen der Datenbank auf der Seite Anwendung>Kompatibilität die Option Drag&Drop von außerhalb von 4D verweigern. Sie ist in konvertierten Datenbanken standardmäßig mar-kiert.

Ist diese Option markiert, wird das Ziehen von externen Objekten per Drop-Technik in 4D Formulare verweigert. Beachten Sie, dass sich externe Objekte weiterhin in Objekte mit der Eigenschaft Automatisches Drop einfügen lassen, wenn die Anwendung diese Objekte inter--pretieren kann (Text oder Bild).

Referenz

DRAG AND DROP PROPERTIES, Drop position, Form event, GET PROCESS VARIABLE, Is a list, RESOLVE POINTER, Type.


4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next