#include 'fivewin.ch'
FUNCTION Main()
LOCAL oWnd, oBrw1, oBrw2, oCur, i, aData := {}
FOR i := 1 TO 6
AAdd( aData, { str(i,2), "Description " + Str( i ), Replicate( Chr( 64 + i ), 5 ) } )
NEXT i
DEFINE CURSOR oCur DRAG
DEFINE WINDOW oWnd
oWnd:SetSize( 650, 350 )
oBrw1 := TXBrowse():New( oWnd )
oBrw1:SetArray( aData )
oBrw1:CreateFromCode()
oBrw1:SetSize( 300, 200 )
//
oBrw1:oDragCursor := oCur
oBrw1:bDragBegin := { |nRow,nCol,nFlags| DragBegin( nRow, nCol, nFlags, oBrw1 ) }
oBrw1:bDropOver := { |uDropInfo, nRow, nCol, nFlags| DropOver( uDropInfo, nRow, nCol, nFlags, oBrw1 ) }
//
oBrw2 := TXBrowse():New( oWnd )
oBrw2:SetArray( aData )
oBrw2:CreateFromCode()
oBrw2:nLeft = 310
oBrw2:SetSize( 300, 200 )
//
oBrw2:oDragCursor := oCur
oBrw2:bDragBegin := { |nRow,nCol,nFlags| DragBegin( nRow, nCol, nFlags, oBrw2 ) }
oBrw2:bDropOver := { |uDropInfo, nRow, nCol, nFlags| DropOver( uDropInfo, nRow, nCol, nFlags, oBrw2 ) }
ACTIVATE WINDOW oWnd
oCur:End()
RETURN NIL
STATIC FUNCTION DragBegin( nRow, nCol, nFlags, oBrw )
SetDropInfo( { EVAL( oBrw:SelectedCol():bStrData ), oBrw } )
RETURN NIL
STATIC FUNCTION DropOver( uDropInfo, nRow, nCol, nFlags, oBrw )
local aPoint := { nRow, nCol }
if uDropInfo[ 2 ]:hWnd != oBrw:hWnd
aPoint = ClientToScreen( uDropInfo[ 2 ]:hWnd, aPoint )
aPoint = ScreenToClient( oBrw:hWnd, aPoint )
nRow = If( aPoint[ 1 ] > 30000, aPoint[ 1 ] - 65535, aPoint[ 1 ] )
nCol = If( aPoint[ 2 ] > 30000, aPoint[ 2 ] - 65535, aPoint[ 2 ] )
endif
oBrw:lButtonDown( nRow, nCol, nFlags )
oBrw:lButtonUp( nRow, nCol, nFlags )
MsgInfo( uDropInfo[ 1 ] + CRLF + 'dropped on' + CRLF + ;
EVAL( oBrw:SelectedCol():bStrData ) )
RETURN NIL