4D v19Drop position |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v19
Drop position
|
Drop position {( SpaltenNr | BildPosY )} -> Funktionsergebnis | ||||||||
Parameter | Typ | Beschreibung | ||||||
SpaltenNr | BildPosY | Lange Ganzzahl |
![]() |
Spaltennummer der Listbox (-1 wenn Drop außerhalb der letzten Spalte erfolgt) oder Position der Y Koordinate im Bild | |||||
Funktionsergebnis | Lange Ganzzahl |
![]() |
Zahl (Array/Listbox) oder • Position (hierarchische Liste) oder • Position in String (Text/Combobox) des Zieleintrags oder • -1, wenn Drop außerhalb des letzten Array Elements oder Listeneintrags erfolgt oder • Position der X Koordinate im Bild |
|||||
Die Funktion Drop position findet in einem "komplexen" Zielobjekt die Stelle, an die ein Objekt per Drag-and-Drop bewegt wurde.
Sie verwenden Drop position bei einem Drag-and-Drop Ereignis, das in einem Array, einer Listbox, einer hierarchischen Liste oder einem Feld vom Typ Text oder Bild auftritt.
Rufen Sie Drop position bei einem Ereignis in einem Array, einer Listbox, einer Combobox, einer hierarchischen Liste oder einem Text auf, das kein Drag-and-Drop Ereignis ist, gibt die Funktion ebenfalls -1 zurück.
Wichtig: Ein Formularobjekt nimmt bewegte Daten nur an, 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.
Im folgenden Beispiel soll eine Liste bezahlter Beträge nach Monat und Person aufgeteilt werden. Das wird per Drag-and-Drop zwischen zwei Listboxen ausgeführt.
Die Objektmethode der rechten Listbox (Quelle) enthält folgenden Code:
If(Form event code=On Begin Drag Over) //Ereignis muss für die Listbox ausgewählt werden
C_BLOB($tomove)
C_TEXT($val)
LISTBOX GET CELL POSITION(*;"LBPaid";$col;$row)
$val:=PaidCol{$row}
VARIABLE TO BLOB($val;$tomove)
APPEND DATA TO PASTEBOARD("mydrag";$tomove) //Eigenen Schlüssel verwenden
End if
Die Objektmethode der linken Listbox (Ziel) enthält folgenden Code:
Case of
:(Form event code=On Drag Over) //Ereignis muss für die Listbox ausgewählt werden
C_BLOB($toGet)
C_LONGINT($rownum)
$rownum:=Drop position($colnum)
GET PASTEBOARD DATA("mydrag";$toGet) //Daten erhalten
If(Pasteboard data size("mydrag")>0)&($colnum#1)) //Sind Daten im Pasteboard
$0:=0 //Drop wird akzeptiert
Else
$0:=-1 //Drop wird verweigert
End if
:(Form event code=On Drop) //Ereignis muss für die Listbox ausgewählt werden
C_BLOB($toGet)
C_LONGINT($rownum;$val)
$rownum:=Drop position($colnum)
GET PASTEBOARD DATA("mydrag";$toGet)
BLOB TO VARIABLE($toGet;$val) //den Wert erhalten
If(Pasteboard data size("mydrag")>0))
If($colnum=1)
BEEP
Else
Case of //Werte von Drop hinzufügen
:($colnum=2)
John{$rownum}:=John{$rownum}+$val
:($colnum=3)
Mark{$rownum}:=Mark{$rownum}+$val
:($colnum=4)
Peter{$rownum}:=Peter{$rownum}+$val
End case
DELETE FROM ARRAY(PaidCol;Find in array(PaidCol;$val)) // Quell Listbox updaten
End if
End if
End case
Produkt: 4D
Thema: Drag and Drop
Nummer:
608
Geändert: 4D v11 SQL
Geändert: 4D v12
4D Programmiersprache ( 4D v19)
4D Programmiersprache ( 4D v19.1)