4D v16.3DRAG AND DROP PROPERTIES |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
DRAG AND DROP PROPERTIES
|
DRAG AND DROP PROPERTIES ( Quellobjekt ; Quellelement ; Quellprozess ) | ||||||||
Parameter | Typ | Beschreibung | ||||||
Quellobjekt | Zeiger |
![]() |
Zeiger zum Bewegen des Quellobjekts per Drag-and-Drop | |||||
Quellelement | Lange Ganzzahl |
![]() |
Gezogene Elementnummer des Array oder gezogener Eintrag der hierarchischen Liste oder -1, wenn Quellobjekt weder Array, Liste noch hierarchische Liste ist | |||||
Quellprozess | Lange Ganzzahl |
![]() |
Nummer des Quellprozesses | |||||
Hinweis zur Kompatibilität: Ab 4D Version 11 empfehlen wir, Drag-and-Drop Operationen, insbesondere auf Interprozessebene, über das Ereignis On Begin Drag Over und die Befehle im Kapitel Pasteboard zu verwalten.
Der Befehl DRAG AND DROP PROPERTIES fragt Informationen über das Quellobjekt ab, wenn für ein "komplexes" Objekt (Array, Listbox, hierarchische Liste) ein Ereignis On Drag Over oder On Drop eintritt.
Sie verwenden DRAG AND DROP PROPERTIES innerhalb der Objektmethode des Objekts bzw. innerhalb einer Unterroutine, die das Objekt aufruft, für die das Ereignis On Drag Over oder On Drop eintritt (das Zielobjekt).
Wichtig: Ein Formularobjekt akzeptiert bewegte Daten nur, wenn die Eigenschaft dropfähig zugewiesen ist. Außerdem muss die dazugehörige Objektmethode für On Drag Over und/oder On Drop aktiviert sein, damit diese Ereignisse durchgeführt werden.
Nach dem Aufruf gilt folgendes:
Rufen Sie DRAG AND DROP PROPERTIES auf, und es gibt kein Drag-and-Drop Ereignis, gibt Quellobjekt den Zeiger NIL zurück, Quellelement den Wert -1 und Quellprozess den Wert 0.
Tipp: 4D verwaltet automatisch die grafische Darstellung von Drag-and-Drop. Sie müssen dann in geeigneter Weise auf das Ereignis antworten. Wie Sie aus den folgenden Beispielen ersehen, ist eine Möglichkeit, die gezogenen Daten zu kopieren. Sie können alternativ dazu auch ausgeklügelte Benutzeroberflächen integrieren, wo z.B. ein per Drag-and-Drop bewegtes Array-Element aus einem Palettenfenster das Zielfenster (das Fenster, welches das Zielobjekt enthält) mit strukturierten Daten füllt (z.B. mehrere Datenfelder aus einem Datensatz, der nur von dem Element des Quell-Arrays erkannt wird).
Sie verwenden DRAG AND DROP PROPERTIES während einem Ereignis On Drag Over, um je nach Typ und Natur des Quellobjekts zu entscheiden, ob das Zielobjekt die Drag-and-Drop Operation akzeptiert. Bei Bestätigen von Drag-and-Drop gibt die Objektmethode $0:=0 zurück. Bei Annullieren von Drag-and-Drop gibt die Objektmethode $0:=-1 zurück. Dieser Vorgang wird auf dem Bildschirm grafisch dargestellt: Bei Bestätigen wird das potentielle Ziel der Drag-and-Drop Operation markiert.
Verschiedene Formulare Ihrer Datenbank enthalten rollbare Bereiche, die Sie per Drag-and-Drop von einem Teil des rollbaren Bereichs in einen anderen Teil darin manuell umsortieren wollen. Anstatt für jeden Fall einen spezifischen Code zu schreiben, können Sie eine generische Projektmethode integrieren, die all diese rollbaren Bereiche verwaltet:
` Verwalte Projektmethode für Drag-and-Drop im gleichen Array
` Verwalte Drag-and-Drop im gleichen Array ( Zeiger ) -> Boolean
` Verwalte Drag-and-Drop im gleichen Array ( -> Array ) -> War Drag-and-Drop im gleichen Array
Case of
:(Form event=On Drag Over)
DRAG AND DROP PROPERTIES($vpSrcObj;$vlSrcElem;$vlPID)
If($vpSrcObj=$1)
` Bestätige Drag-and-Drop, wenn aus dem gleichen Array
$0:=0
Else
$0:=-1
End if
:(Form event=On Drop)
` Hole Information über das Quellobjekt für Drag-and-Drop
DRAG AND DROP PROPERTIES($vpSrcObj;$vlSrcElem;$vlPID)
` Hole Nummer des Zielelements
$vlDstElem:=Drop position
` Wurde das Element nicht auf sich selbst bewegt
If($vlDstElem#$vlSrcElem)
` Sichere bewegtes Element in Element 0 des Array
$1->{0}:=$1->{$vlSrcElem}
` Lösche das bewegte Element
DELETE FROM ARRAY($1->;$vlSrcElem)
` War das Zielelement außerhalb des bewegten Elements
If($vlDstElem>$vlSrcElem)
` Setze Nummer des Zielelements zurück
$vlDstElem:=$vlDstElem-1
End if
` Geschah Drag-and-Drop außerhalb des letzten Elements
If($vlDstElem=-1)
` Setze Nummer des Zielelements auf ein neues Element am Ende des Array
$vlDstElem:=Size of array($1->)+1
End if
` Füge dieses neue Element ein
INSERT IN ARRAY($1->;$vlDstElem)
` Setze seinen zuvor im Element Null des Array gesicherten Wert
$1->{$vlDstElem}:=$1->{0}
` Das Element wird das neu ausgewählte Element des Array
$1->:=$vlDstElem
End if
End case
Diese Projektmethode können Sie folgendermaßen einsetzen:
` Objektmethode für rollbaren Bereich in Array
Case of
`...
:(Form event=On Drag Over)
$0:=Handle self array drag and drop(Self)
:(Form event=On Drop)
Handle self array drag and drop(Self)
` ...
End case
Verschiedene Formulare Ihrer Datenbank enthalten eingebbare Textbereiche, in die Sie per Drag-and-Drop Daten aus unterschiedlichen Quellen bewegen wollen. Anstatt für jeden Fall einen spezifischen Code zu schreiben, können Sie eine generische Projektmethode integrieren, die all diese eingebbaren Textbereiche verwaltet:
` Verwalte Projektmethode für Bewegen in Textbereich
` Verwalte Bewegen in Textbereich ( Zeiger )
` Verwalte Bewegen in Textbereich ( -> Text oder String Variable )
Case of
` Verwende dieses Ereignis, um Drag-and-Drop zu bestätigen oder abzuweisen
:(Form event=On Drag Over)
` Initialisiere $0 für Abweisen
$0:=-1
` Hole Information über Quellobjekt für Drag-and-Drop
DRAG AND DROP PROPERTIES($vpSrcObj;$vlSrcElem;$vlPID)
` In diesem Beispiel ist Drag-and-Drop im gleichen Objekt nicht erlaubt
If($vpSrcObj#$1)
` Hole Typ der gezogenen Daten
$vlSrcType:=Type($vpSrcObj->)
Case of
:($vlSrcType=Is text)
` OK für Textvariablen
$0:=0
:($vlSrcType=Is string var)
` String Variable ist OK
$0:=0
:(($vlSrcType=String array)|($vlSrcType=Text array))
` String und Text Arrays sind OK
$0:=0
:(($vlSrcType=Is longint)|($vlSrcType=Is real)
If(Is a list($vpSrcObj->))
` Hierarchische Liste ist OK
$0:=0
End if
End case
End if
` Zeigen Sie mit diesem Ereignis die aktuelle Drag&Drop Aktion an
:(Form event=On Drop)
$vtDraggedData:=""
` Hole Information über Quellobjekt für Drag&Drop
DRAG AND DROP PROPERTIES($vpSrcObj;$vlSrcElem;$vlPID)
` Hole Typ der gezogenen Variablen
$vlSrcType:=Type($vpSrcObj->)
Case of
` Ist es ein Array
:(($vlSrcType=String array)|($vlSrcType=Text array))
If($vlPID#Current process)
` Lies Element aus der Quellprozessinstanz der Variablen
GET PROCESS VARIABLE($vlPID;$vpSrcObj->{$vlSrcElem};$vtDraggedData)
Else
` Kopiere das Array-Element
$vtDraggedData:=$vpSrcObj->{$vlSrcElem}
End if
` Ist es eine Liste
:(($vlSrcType=Is real)|($vlSrcType=Is longint)
` Ist es eine Liste aus einem anderen Prozess
If($vlPID#Current process)
` Hole Listenreferenz aus dem anderen Prozess
GET PROCESS VARIABLE($vlPID;$vpSrcObj->;$vlList)
Else
$vlList:=$vpSrcObj->
End if
` Existiert die Liste
If(Is a list($vpSrcObj->)
` Hole Text aus dem Eintrag der entsprechenden Position
GET LIST ITEM($vlList;$vlSrcElem;$vlItemRef;$vsItemText)
$vtDraggedData:=$vsItemText
End if
Else
` Es ist eine String oder Text Variable
If($vlPID#Current process)
GET PROCESS VARIABLE($vlPID;$vpSrcObj->;$vtDraggedData)
Else
$vtDraggedData:=$vpSrcObj->
End if
End case
` Gibt es gerade etwas zu Bewegen (das Quellobjekt kann leer sein)
If($vtDraggedData#"")
$1->:=$1->+$vtDraggedData
End if
End case
Diese Projektmethode können Sie folgendermaßen einsetzen:
` Objektmethode [anyTable]aTextField
Case of
` ...
:(Form event=On Drag Over)
$0:=Handle dropping to text area(Self)
:(Form event=On Drop)
Handle dropping to text area(Self)
` ...
End case
Wir wollen einen Textbereich, z.B. ein Etikett, mit Daten füllen, die per Drag-and-Drop aus einer Listbox entnommen werden.
Die Objektmethode label1 lautet:
Case of
:(Form event=On Drag Over)
DRAG AND DROP PROPERTIES($source;$arrayrow;$processnum)
If($source=Get pointer("list box1"))
$0:=0 ` Drop ist angenommen
Else
$0:=-1
End if
:(Form event=On Drop)
DRAG AND DROP PROPERTIES($source;$arrayrow;$processnum)
QUERY([Members];[Members]LastName=arrNames{$arrayrow})
If(Records in selection([Members])#0)
label1:=[Members]FirstName+" "+[Members]LastName+Char(Carriage return)+[Members]Address+
Char(Carriage return)+[Members]City+","+" "+[Members]State+" "+[Members]ZipCode
End if
End case
Nun lässt sich folgende Aktion ausführen
Drop position
Einführung in Drag and Drop
Form event
GET PROCESS VARIABLE
Is a list
RESOLVE POINTER
Produkt: 4D
Thema: Drag and Drop
Nummer:
607
Geändert: 4D 2004.2
4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)