I have just read a problem inside foxite where when a user accidentally moves the mouse beyond the form boundaries, then drag and drop fails because the objects disappear on the areas beyond the form.
The solution to that is to restrict the drag and drop movements within your form, or dimension within objects in your form. Here are two samples showing how to achieve that:
Sample 1:
* Restricting drag and drop
within the form
Local oForm As Form
oForm = Createobject('TestForm')
oForm.Show(1)
Return
Define Class TestForm As Form
AutoCenter
=
.T.
Width = 900
Height = 440
Caption = 'Drag, Drop
& Restrict Inside Form'
Add Object container1 As Mycontainer With Top = 30, Left = 50
Enddefine
Define Class Mycontainer As Container
Height
=
100
Width = 100
Procedure
MouseMove
Lparameters
nButton, nShift, nXCoord, nYCoord
If m.nButton = 1 And Between(m.nYCoord,0,Thisform.Height-This.Height) And ;
BETWEEN(m.nXCoord,0,Thisform.Width-This.Width)
This.Move(m.nXCoord, m.nYCoord)
Endif
Endproc
Enddefine
Sample 2:
* Restricing within objects on
form, in this case above or below the lines
Local oForm As Form
oForm = Createobject('TestForm')
oForm.Show(1)
Return
Define Class TestForm As Form
AutoCenter = .T.
Width = 900
Height = 440
Caption = 'Drag, Drop & Restrict'
Add Object Shape1 As shape With Top
=
30, Left
=
0, Width
=
900, height
= 1
Add Object Shape2 As shape With Top
=
200, Left
=
0, Width
=
900, height
= 1
Add Object Command1 As MyButton With Caption='Move Me
outside of the lines', Top = 35, Left = 5, width = 200, height = 30
Enddefine
Define Class MyButton As CommandButton
Procedure MouseMove
Lparameters nButton, nShift, nXCoord, nYCoord
If m.nButton = 1 AND BETWEEN(m.nYCoord,30,171)
This.Move(m.nXCoord, m.nYCoord)
WAIT WINDOW m.nYCoord nowait
Endif
Endproc
Enddefine
In case you need it. Cheers!