Drag and Drop

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

Version 6.0


Ab Version 6 von 4th Dimension können Sie Objekte in Ihren Formularen per Drag&Drop-Technik 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 Prozeß zum nächsten möglich.

Version 6.0 bietet keine Drag & Drop-Technik zum oder vom Schreibtisch bzw. zu oder von einer anderen Anwendung. Diese Funktionalität steht jedoch über Plug-Ins zur Verfügung, die von 4D Partnern entwickelt wurden.

Hinweis: Zu Beginn gehen wir davon aus, daß eine Drag&Drop Aktion Daten von einem Punkt zu einem anderen "transportiert". Später sehen wir dann , daß Drag&Drop auch als Metapher für eine 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 im Dialogfenster Objekteigenschaften auf der Seite Anzeige fest.

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

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

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 oder Einträge einer hierarchischen Liste. Sie können umgekehrt auch ein Objekt per Drag&Drop in ein eigenes Element eines Arrays oder in ein Item einer hierarchischen Liste 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äßt, läßt 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 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. Nur Schaltflächen vom Typ 3D lassen sich direkt ziehen.

Ein Objekt, das sowohl drag- als auch dropfähig ist, läßt 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 das Fenster Objekteigenschaften mit den markierten Eigenschaften dropfähig bzw. dragfähig für die ausgewählten Objekte:

Drag&Drop Handling auf Benutzerebene


4th Dimension sorgt für die Drag&Drop-Fähigkeit der Benutzeroberfläche. Klickt der Benutzer auf ein dragfähiges Objekt und bewegt die Maus, zieht 4D das Objekt; diese Operation wird auf dem Bildschirm mit einem gestrichelten Rechteck angezeigt, das den Mausbewegungen folgt. Im folgenden Beispiel wird ein Item aus einer hierarchischen Liste in das Textfeld gezogen:

Beachten Sie den markierten Rahmen um den Bereich Textfeld. Die Markierung zeigt das Zielobjekt an, in diesem Fall das Textfeld. Lassen Sie nun die Maustaste los, geht 4D davon aus, daß das gezogene Objekt in den markierten Bereich bewegt werden soll.

Im Fenster Datenbankeigenschaften legen Sie fest, ob das Zielobjekt als Rahmen oder Muster bzw. beides markiert wird:

Standardmäßig ist als Drag&Drop Anzeige Rahmen ausgewählt. Damit wird das Objekt mit einem Rahmen hervorgehoben. Wenn Sie farbige Hintergründe oder Objektrahmen verwenden, kann dies jedoch Verwirrung stiften. Sie können alternativ dazu die Drag&Drop Anzeige Muster wählen. Das Zielobjekt wird dann mit Schrägstrichen gefüllt, wie in den beiden folgenden Beispielen angezeigt:

Hier wurde ein Array-Element in das entsprechende Array gezogen:

Sie können auch beide Markierungsarten wählen.

Hinweis: Die Markierung des Zielobjekts "folgt" den Elementen oder Items, wenn dieses ein Array (rollbarer Bereich) oder eine hierarchische Liste ist.

Drag&Drop Handling per Programmierung


4th Dimension steuert Drag&Drop in der Benutzeroberfläche —Sie müssen sich selbst um die Programmierung von Drag&Drop kümmern. 4D stellt dafür zwei Formularereignisse zur Verfügung: On Drag Over und On Drop. Beide Ereignisse werden zum Zielobjekt gesendet. Während einer Drag&Drop Operation wird nie die Objektmethode des Quellobjekts benutzt.

Damit On Drag Over und On Drop akzeptiert werden, müssen beide Ereignisse für dieses Zielobjekt im Fenster Objekteigenschaften aktiviert sein:

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 muß die Methode des Zielobjekts 0 (Null) zurückgeben. Sie schreiben also $0:=0. Zum Annullieren von Drag muß 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, daß Drag bestätigt 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, daß die bewegten Daten in das Zielobjekt gesetzt werden. Es bedeutet lediglich, daß 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 Interprozeßebene wird die Objektmethode des Zielobjekts für ein Ereignis On Drag Over im Kontext des Quellprozesses und nicht im Prozeß 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, daß die Daten für das Zielobjekt geeignet sind.

Ein interessanter Aspekt bei der Integration von Drag&Drop ist, daß 4D Ihnen freie Hand läßt. 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 Item einer Liste ist.

Die Prozeßnummer 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) oder eine hierarchische Liste 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 Prozeß beschränkt, führen Sie mit diesen Befehlen die geeigneten Aktionen aus, z.B. dem Zielobjekt das Quellobjekt zuweisen.

Bei Drag&Drop auf Interprozeßebene ist beim Zugreifen auf gezogene Daten Vorsicht geboten. Sie müssen vom Quellprozeß 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, daß 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 Interprozeßvariable kopieren, die während dem Ereignis On Drop wiederverwendet wird.

Sie erhalten die erforderlichen Daten, wenn Sie während dem Ereignis On Drop eine Interprozeßkommunikation 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.

Referenz

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


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