Skip to main content

Add DragAndDrop Handler (script step reference)

Troi File Plug-in > Script steps reference > Add DragAndDrop Handler
Troi File Plug-in for FileMaker Pro

Add DragAndDrop Handler

This step implements drag and drop of files and folders onto a FileMaker window.

SyntaxScript step badge

Add DragAndDrop Handler [ Select ; Result (error) ; FileName ; ScriptName ;
                          FieldBounds ; Cursor type ; Allow Mail Drops ;
                          Scroll the drop zone ]

Options

Select entire contents replaces the contents of a field with the result. If not checked the result replaces the currently selected portion of the field
Result (error) an error code
FileName the name of the file that contains the script to be triggered
ScriptName the name of the script to be triggered when files/folders are dropped on a window
FieldBounds (optional) a rectangle on the layout where the drag is accepted. Dimensions (in pixels) are in this order: "left top right bottom", which is the same order as the FileMaker FieldBounds function returns
Cursor type can be "Link Cursor" (default): while dragging show an arrow cursor with a small link symbol or "Copy Cursor": while dragging show arrow cursor with a small plus symbol
Allow Mail Drops this will allow emails (from the macOS Mail.app) to be dragged to FileMaker Pro
Scroll the drop zone when you use a drop zone for the drag destination and check this option, the position of the dropzone will scroll too when scrolling the FileMaker window

Returned Result

Data type returned

Error code

Result

The returned result is an error code. An error always starts with 2 dollars, followed by the error code. You should always check for errors. Returned error codes can be:

0 no error
$$-50 paramErr there was an error with a parameter
$$-5600 errInvalidWindowRef the window could not be found
$$-4223 errTooManyEvents you have specified more than 6 D&D handlers

Other errors may be returned.

Originated in

Troi File Plug-in 9.0

Compatibility

FileMaker Pro 16 to FileMaker Pro 2023

Considerations

You can specify up to six separate drag destinations, by calling the step six times, each time specifying the rectangles you want as drop zones.

The FileMaker window that is in front when the Add DragAndDrop Handler step is run, will be activated as the destination of future drags.

When the plug-in detects a drag on the destination window, the specified script will be triggered. The (incoming) ScriptParameter of the triggered script will contain the list of files/folders that were dragged on the window.

You can drag one or more files and folders (or a mix of this) on the window. The trigger script should be expecting this and be capable to handle this, for example in a loop. Alternatively the script can only use the first file in the list.

See the switch "-PackageFolderAttr" in the function TrFile_GetFileAttribute: this can be used to determine if a result of the drag and drop action is a package.

KNOWN ISSUES
– The plug-in is not aware of a change in the position of the custom fieldbounds, for example when scrolled. Check the Scroll the drop zone option to have the position of the drop zone automatically adjusted when scrolling the FileMaker window
– (macOS) the drop box highlight is only visible over a white background.
– (macOS) the link and copy cursor are visible only when moving the cursor.

v13.1 changed the maximum number of drop zones from 3 to 6.

Example

To make drag and drop work you need a trigger script that handles the drag. You also need to start and stop the plug-in handling the drags. Here we create a (simplified) script that will put the path of the first file found in a field. See the example files for a more extensive script, handling more files and container fields.

– Create a script named “DragTriggerscript”:

Set Variable [ $pathList ; Value : Get ( ScriptParameter ) ] 
If [ Get ( FoundCount ) = 0 ] 
    New Record/Request 
End If 
Set Variable [ $returnPos ; Position ( $pathList ; "¶" ; 1 ; 1 ) ] 
Set Field [ this::onepath ; 
	If ( $returnPos > 0 ; Left ( $pathList ; $returnPos - 1 ) ; $pathList ) ]
# here you can add actions you want to perform on this file

– Starting drag and drop can be done like this:

Add DragAndDrop Handler [ Select ; gErrorCode ; Get ( FileName ) ;
			"DragTriggerscript" ) ]

After this step has been executed the user can drag files on the window and the DragTriggerScript will be run.

– Stopping drag and drop can be done with this script step:

Stop DragAndDrop Handlers

Example 2

Set Variable [ $containerFieldBounds ; FieldBounds ( Get ( FileName ) ; Get ( LayoutName ) ; 
			Get ( ActiveFieldName ) ) ]
Add DragAndDrop Handler[ Select ; gErrorCode ; Get ( FileName ) ; 
			"DragTriggerscript" ; $containerFieldBounds ) ]

This will make the drag area around a container field.

Related script stepScript step badge

Stop DragAndDrop Handlers

Related functionsFunction badge

TrFile_DragAndDrop
TrFile_GetFileAttribute

Related topics

Troi File Plug-in online help (overview)


Online Help Page for Troi File Plug-in for 16 to 2023 –> Add DragAndDrop Handler (filep7298) 2023-0601 16:15:21