Is there somewhere an example how to drag&drop inside a xBrowser.
Thanks in advance
Otto
Is there somewhere an example how to drag&drop inside a xBrowser.
Thanks in advance
Otto
#include 'fivewin.ch'
FUNCTION Main()
LOCAL oWnd, oBrw, 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
oBrw := TXBrowse():New( oWnd )
oBrw:SetArray( aData )
oBrw:CreateFromCode()
oWnd:oClient := oBrw
//
oBrw:oDragCursor := oCur
oBrw:bDragBegin := { |nRow,nCol,nFlags| DragBegin( nRow, nCol, nFlags, oBrw ) }
oBrw:bDropOver := { |uDropInfo, nRow, nCol, nFlags| DropOver( uDropInfo, nRow, nCol, nFlags, oBrw ) }
//
ACTIVATE WINDOW oWnd
oCur:End()
RETURN NIL
STATIC FUNCTION DragBegin( nRow, nCol, nFlags, oBrw )
SetDropInfo( EVAL( oBrw:SelectedCol():bStrData ) )
RETURN NIL
STATIC FUNCTION DropOver( uDropInfo, nRow, nCol, nFlags, oBrw )
oBrw:lButtonDown( nRow, nCol, nFlags)
oBrw:lButtonUp( nRow, nCol, nFlags)
MsgInfo( uDropInfo + CRLF + 'dropped on' + CRLF + ;
EVAL( oBrw:SelectedCol():bStrData ) )
RETURN NILNice sample, thank you!
EMG
NageswaraRao, thank you very much.
I was so free to put it on www.fwcodesnips.com
Best regards,
Otto

function CheckListbox( nRow, nCol, oBrw, oLbx, nKeyFlags,oChild )
if nRow < oBrw:HeaderHeight()
oBrw:PageUp()
elseif nRow > ( oBrw:BrwHeight() - oBrw:FooterHeight() )
oBrw:PageDown()
endif
return nilNageswaraRao,
thank you for your help. Your code is better than that I had.
Scrolling is working.
But what is the best way to change the record position. Sure I have to use an index.
But then?
Best regards,
Otto
Even with indexes this code works fine. What more do you want to do ?
Hello NageswaraRao,
…
Peach
Fillet of perch
Swiss sautéed turkey
Smoked salmon
Mushrooms on toast
Bacon
…
For example: I drag <Fillet of perch> and drop it over <Bacon> then the new order
should be:
…
Peach
Swiss sautéed turkey
Smoked salmon
Mushrooms on toast
Fillet of perch
Bacon
…
Best regards,
Otto
You must swap the content of the two records or swap just the content of an indexed field.
EMG
Obviously if we want to achieve what he wants, we need to have a separate order column and play with the order serial numbers there. I am working on it
Ofcourse with arrays it is very easy and simple. Just delete the dragged row and insert before the row on which it is dropped.
before function Main:
REQUEST DBFCDX
// change the dbf open code like this:
USE C:\FWH\samples\LEXIKON.DBF NEW ALIAS LEX EXCLUSIVE VIA 'DBFCDX'
DBEVAL( {|| LEX->NUMMER := RECNO() } )
SET ORDER TO TAG NUMMER
GO TOP
// replace the new drag and drop functions given below
STATIC FUNCTION DragBegin( nRow, nCol, nFlags, oBrw )
SetDropInfo( (oBrw:cAlias)->( recno() ) )
RETURN NIL
STATIC FUNCTION DropOver( uDropInfo, nRow, nCol, nFlags, oBrw )
LOCAL nDragRec := uDropInfo
LOCAL nThisRec
LOCAL nThisKey
LOCAL nPrevKey := 0
oBrw:lButtonDown( nRow, nCol, nFlags )
oBrw:lButtonUp( nRow, nCol, nFlags )
nThisRec := (oBrw:cAlias)->( RECNO() )
nThisKey := (oBrw:cAlias)->NUMMER
( oBrw:cAlias )->( dbSKIP( -1 ) )
IF !(oBrw:cAlias)->( bof() )
nPrevKey := ( oBrw:cAlias )->NUMMER
ENDIF
( oBrw:cAlias )->( dbGOTO( nDragRec ) )
( oBrw:cAlias )->NUMMER := ( nThisKey + nPrevKey ) / 2
( oBrw:cAlias )->( dbGOTO( nThisRec ) )
oBrw:Refresh()
RETURN NILNageswaraRao,
I am curious, why 13 decimal places for your nummer field? Recno()'s are integers.
James
All is working. Thank you very much.
Best regards,
Otto