Skip to main content
Version: 20 R7 BETA

Drop position

Drop position {( columnNumber | pictPosY )} : Integer

ParameterTypeDescription
columnNumber | pictPosYIntegerList box column number (-1 if the drop occurs beyond the last column) or Position of Y coordinate in picture
Function resultInteger• Number (list box) or • Position (hierarchical list) or • Position in string (text/combo box/4D Write Pro area) of destination item or • -1 if drop occurred beyond the last list item • Position of X coordinate in picture

Description

The Drop position command can be used to find out the location, in a “complex” destination object, where an object has been (dragged and) dropped.

Typically, you will use Drop position when handling a drag and drop event that occurred over a list box, a hierarchical list, a text or picture field, or a 4D Write Pro area.

  • If the destination object is a list box, the command returns a row number. In this case, the command also returns the column number where the drop took place in the optional columnNumber parameter.
  • If the destination object is a hierarchical list, the command returns an item position.
  • If the destination object is a text type variable or field, or a combo box, the command returns a character position within the string.
    In all the above cases, the command may return -1 if the source object has been dropped beyond the last element or the last item of the destination object.
  • If the destination object is a picture type variable or field, the command returns the horizontal location of the click and, in the optional pictPosY parameter, the vertical location of the click. The values returned are expressed in pixels and in relation to the local coordinate system.

If you call Drop position when handling an event that is not a drag-and-drop event and that occurred over a list box, a combo box, a hierarchical list, a text, a picture, or a 4D Write Pro area, the command returns -1.

Important: A form object accepts dropped data if its Droppable property has been selected. Also, its object method must be activated for On Drag Over and/or On Drop, in order to process these events.

Example

In the following example, a list of amounts paid must be broken down per month and per person. This is carried out by drag and drop between two list boxes:

The right (source) list box object method contains the following code:

 If(Form event code=On Begin Drag Over) //event must be selected for the list box
    var $tomove : Blob
    var $val : Text
    LISTBOX GET CELL POSITION(*;"LBPaid";$col;$row)
    $val:=PaidCol{$row}
    VARIABLE TO BLOB($val;$tomove)
    APPEND DATA TO PASTEBOARD("mydrag";$tomove) //use a custom key
 End if

The left (destination) list box object method contains the following code:

 Case of
 
    :(Form event code=On Drag Over) //event must be selected for the list box
       var $toGet : Blob
       var $rownum : Integer
       $rownum:=Drop position($colnum)
       GET PASTEBOARD DATA("mydrag";$toGet) //get data
       If(Pasteboard data size("mydrag")>0)&($colnum#1)) //If data are in the pasteboard
          $0:=0 //we would accept the drop
       Else
          $0:=-1 //The drop is refused
       End if
 
    :(Form event code=On Drop) //event must be selected for the list box
       var $toGet : Blob
       var $rownum;$val : Integer
       $rownum:=Drop position($colnum)
       GET PASTEBOARD DATA("mydrag";$toGet)
       BLOB TO VARIABLE($toGet;$val) //get the value
       If(Pasteboard data size("mydrag")>0))
          If($colnum=1)
             BEEP
          Else
             Case of //Adding of dropped values
                :($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)) //Update source listbox
          End if
       End if
 End case

See also

Drag and Drop

Properties

Command number608
Thread safe