FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Drag and Drop en un Browse.
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Drag and Drop en un Browse.
Posted: Mon Feb 21, 2022 07:44 AM

Hola, tengo un dialogo en el que se muestra un TCBrowse con datos de un array y he programado una funci贸n que permite intercambiar las filas de ese browse.
Esto lo hago con el teclado, pero me interesar铆a poder arrastrar una fila de una posici贸n a otra mediante drag and drop
He estado buscando pero no encuentro nada al respecto, tambien he estado probando con bDragBegin y bDropOver pero no lo consigo.
Alg煤n ejemplo de como mover una fila de un browse a otra posici贸n del mismo browse (si se puede claro).

Gracias
Un saludo

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Drag and Drop en un Browse.
Posted: Wed Feb 23, 2022 02:24 AM
Intenta con esto:
Code (fw): Select all Collapse
   WITH OBJECT oBrw
      :oDragCursor      := oCur
      :bDragBegin       := { |r,c,f,o| SetDropInfo( { oBrw:nArrayAt, oBrw:aRow } ) }
      :bDropOver        := { |u,r,c,f| oBrw:LButtonDown( r,c ), ;
                                       oBrw:LButtonUp(r,c), ;
                                       aData[u[1]] := oBrw:aRow, ;
                                       aData[oBrw:nArrayAt] := u[2], ;
                                       oBrw:Refresh() }

      :CreateFromCode()
   END

Saludos.
Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Re: Drag and Drop en un Browse.
Posted: Mon Feb 28, 2022 05:54 PM
Gracias,

He conseguido arrastras de un listbox a otro, pero ahora no consigo arrastrar desde un xbrowse a un listbox

Si recibo el evento dropover desde un listbox a otro listbox, de un lisbrox a un xbrowse, o de un xbrowse dentro del mismo xbrowse pero no recibo el evento dropover desde un xbrowse a un listbox

Se queda el curso en modo arrastrar hasta que hago la operaci贸n de arrastrar dentro del mismo xbrowse

Un saludo

Pongo un ejemplo de lo que me pasa. En este ejemplo se puede arastrar entre los listbox pero no me deja arrastras del browse al listbox

Code (fw): Select all Collapse
//------------------------------------------------------------------------//
STATIC FUNCTION Test()
聽 聽 Local oDlg
聽 聽 Local oLbx1, oLbx2, oLbx3, cValue, aItems
聽 聽 Local oBrw1
聽 聽 Local oCursor, oOrigen, oDestino

聽 聽 DEFINE CURSOR oCursor drag

聽 聽 aItems := { "UNO", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE" }
聽 聽 DEFINE DIALOG oDlg SIZE 640,480


聽 聽 @ 聽10, 聽10 LISTBOX oLbx1 VAR cValue ITEMS aItems ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 80, 100 PIXEL OF oDlg

聽 聽 @ 聽10, 100 LISTBOX oLbx2 VAR cValue ITEMS {} ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 80, 100 PIXEL OF oDlg

聽 聽 @ 聽10, 190 LISTBOX oLbx3 VAR cValue ITEMS {} ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 80, 100 PIXEL OF oDlg

聽 聽 @ 120, 聽10 XBROWSE oBrw1 OF oDlg COLUMNS 1 ;
聽 聽 聽 聽 聽 聽 聽 聽ARRAY { "Item 1","Item 2","Item 3","Item 4" } ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 100, 100 PIXEL

聽 聽 oBrw1:CreateFromCode()

聽 聽 oLbx1:Cargo := "LBX1"
聽 聽 oLbx2:Cargo := "LBX2"
聽 聽 oLbx3:Cargo := "LBX3"
聽 聽 oBrw1:Cargo := "BRW1"


聽 聽 // DEFINIR DRAG AND DROP


聽 聽 oLbx1:oDragCursor := oCursor
聽 聽 oLbx1:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oLbx1, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oLbx1:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oLbx1, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }

聽 聽 oLbx2:oDragCursor := oCursor
聽 聽 oLbx2:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oLbx2, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oLbx2:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oLbx2, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }

聽 聽 oLbx3:oDragCursor := oCursor
聽 聽 oLbx3:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oLbx3, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oLbx3:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oLbx3, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }

聽 聽 oBrw1:oDragCursor := oCursor
聽 聽 oBrw1:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oBrw1, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oBrw1:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oBrw1, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }


聽 聽 ACTIVATE DIALOG oDlg CENTER



RETURN .F.

//-----------------------**-----------------------------------------------//
STATIC FUNCTION SetBegin(oOrigen)
Local cOrigen := Left(oOrigen:Cargo, 3)

If cOrigen == "LBX"
聽 聽If len(oOrigen:aItems) >0
聽 聽 聽 SetDropInfo( oOrigen:getSelText() )
聽 聽EndIf
聽 聽RETURN NIL
EndIf

If cOrigen == "BRW"
聽 聽SetDropInfo( oOrigen:aArrayData[oOrigen:nArrayAt] )
EndIf


RETURN NIL

//-----------------------**-----------------------------------------------//
STATIC FUNCTION SetOver( uDropInfo, nRow, nCol, nKeyFlags,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oOrigen, oDestino)
Local cOrigen 聽:= Left( oOrigen:Cargo, 3)
Local cDestino := Left(oDestino:Cargo, 3)

If cOrigen == "LBX" .and. cDestino == "LBX"
聽 聽oOrigen:del( )
聽 聽oDestino:Add( uDropInfo)
聽 聽RETURN NIL
EndIf

If cOrigen == "BRW" .and. cDestino == "BRW"
聽 聽MsgInfo("Operaci贸n no permitida")
聽 聽RETURN NIL

EndIf

If cOrigen == "BRW" .and. cDestino == "LBX"
聽 聽oDestino:Add( uDropInfo)
EndIf


RETURN NIL
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Drag and Drop en un Browse.
Posted: Tue Mar 01, 2022 03:45 PM
miarcod wrote:Gracias,

He conseguido arrastras de un listbox a otro, pero ahora no consigo arrastrar desde un xbrowse a un listbox

Si recibo el evento dropover desde un listbox a otro listbox, de un lisbrox a un xbrowse, o de un xbrowse dentro del mismo xbrowse pero no recibo el evento dropover desde un xbrowse a un listbox

Se queda el curso en modo arrastrar hasta que hago la operaci贸n de arrastrar dentro del mismo xbrowse

Un saludo

Pongo un ejemplo de lo que me pasa. En este ejemplo se puede arastrar entre los listbox pero no me deja arrastras del browse al listbox



He probado tu codigo con los siguientes resultados:
Drag/Drop entre list boxes OK
Drag/Drop de Browse a list boxes OK ( pero no elimina el item del browse. Probablemente es el comportamiento que deseas )
Drag/Drop de list boxes a Browse NO FUNCIONA ( no veo el codigo para esto: If cOrigen == "LBX" .and. cDestino == "BRW" )

Saludos
Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Re: Drag and Drop en un Browse.
Posted: Wed Mar 02, 2022 02:48 PM
Francisco
Gracias por responder

No se si ser谩 mi versi贸n de pero, a mi el arrastre desde el browxe a cualquiera de los listbox no me lo deja hacer

Al hacer click en una celda aparece el cursor se arrastrar pero al soltarlo en el listbox no se ejecuta el evento dropOver y no pasa nada no se agrega el elemento al listbox, de hecho si hago click para soltar en un listbox el cursor permance en modo arrastre aunque no mantenga el bot贸n pulsado hasta que vuelvo a hacer clic en el browxe, que es cuando se ejcuta el evento dropOver.

Por si fuera alg煤n cambio de alguna clase que estuviera modificada por mi he probado a crear este ejemplo directamente como una muestra mas de los ejemplos de fw pero el problema sigue siendo el mismo lo que me indica que no es ninguna modificaci贸n realizado por mi.

He probado a agregar un segundo browse y en este caso si funciona y se genera el evento en el browse correspondiente, por lo que supondo que tiene que haber algo en la clase Listbox que no se est谩 ejecutando correctamente al soltar desde el browse

Un saludo

Utilizo FWH 20.08
Habour 3.2.0dev (r2004201301)

Pongo el ejemplo rectificado

Code (fw): Select all Collapse
//------------------------------------------------------------------------//
STATIC FUNCTION Test()
聽 聽 Local oDlg
聽 聽 Local oLbx1, oLbx2, oLbx3, cValue, aItems
聽 聽 Local oBrw1, oBrw2
聽 聽 Local oCursor, oOrigen, oDestino

聽 聽 DEFINE CURSOR oCursor drag

聽 聽 aItems := { "UNO", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE" }
聽 聽 DEFINE DIALOG oDlg SIZE 640,480


聽 聽 @ 聽10, 聽10 LISTBOX oLbx1 VAR cValue ITEMS aItems ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 80, 100 PIXEL OF oDlg

聽 聽 @ 聽10, 100 LISTBOX oLbx2 VAR cValue ITEMS {} ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 80, 100 PIXEL OF oDlg

聽 聽 @ 聽10, 190 LISTBOX oLbx3 VAR cValue ITEMS {} ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 80, 100 PIXEL OF oDlg

聽 聽 @ 120, 聽10 XBROWSE oBrw1 OF oDlg COLUMNS 1 ;
聽 聽 聽 聽 聽 聽 聽 聽ARRAY { "Item 1","Item 2","Item 3","Item 4" } ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 100, 100 PIXEL

聽 聽 @ 120, 120 XBROWSE oBrw2 OF oDlg COLUMNS 1 ;
聽 聽 聽 聽 聽 聽 聽 聽ARRAY { "Item 11","Item 12","Item 13","Item 14" } ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 100, 100 PIXEL

聽 聽 oBrw1:CreateFromCode()
聽 聽 oBrw2:CreateFromCode()

聽 聽 oLbx1:Cargo := "LBX1"
聽 聽 oLbx2:Cargo := "LBX2"
聽 聽 oLbx3:Cargo := "LBX3"
聽 聽 oBrw1:Cargo := "BRW1"
聽 聽 oBrw2:Cargo := "BRW2"


聽 聽 // DEFINIR DRAG AND DROP


聽 聽 oLbx1:oDragCursor := oCursor
聽 聽 oLbx1:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oLbx1, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oLbx1:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oLbx1, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }

聽 聽 oLbx2:oDragCursor := oCursor
聽 聽 oLbx2:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oLbx2, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oLbx2:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oLbx2, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }

聽 聽 oLbx3:oDragCursor := oCursor
聽 聽 oLbx3:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oLbx3, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oLbx3:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oLbx3, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }

聽 聽 oBrw1:oDragCursor := oCursor
聽 聽 oBrw1:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oBrw1, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oBrw1:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oBrw1, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }

聽 聽 oBrw2:oDragCursor := oCursor
聽 聽 oBrw2:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oBrw2, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oBrw2:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oBrw2, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }


聽 聽 ACTIVATE DIALOG oDlg CENTER



RETURN .F.

//-----------------------**-----------------------------------------------//
STATIC FUNCTION SetBegin(oOrigen)
Local cOrigen := Left(oOrigen:Cargo, 3)

If cOrigen == "LBX"
聽 聽If len(oOrigen:aItems) >0
聽 聽 聽 SetDropInfo( oOrigen:getSelText() )
聽 聽EndIf
聽 聽RETURN NIL
EndIf

If cOrigen == "BRW"
聽 聽SetDropInfo( oOrigen:aArrayData[oOrigen:nArrayAt] )
EndIf
RETURN NIL

//-----------------------**-----------------------------------------------//
STATIC FUNCTION SetOver( uDropInfo, nRow, nCol, nKeyFlags,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oOrigen, oDestino)
Local cOrigen 聽:= Left( oOrigen:Cargo, 3)
Local cDestino := Left(oDestino:Cargo, 3)

If cOrigen == "LBX" .and. cDestino == "LBX"
聽 聽oOrigen:del( )
聽 聽oDestino:Add( uDropInfo)
聽 聽RETURN NIL
EndIf

If cOrigen == "BRW" .and. cDestino == "BRW"
聽 聽If oOrigen:Cargo == oDestino:Cargo
聽 聽 聽 MsgInfo("No se puede arrastrar dentro del mismo browse")
聽 聽 聽 RETURN NIL
聽 聽EndIf
聽 聽MsgInfo("Borrar elemento " + uDropInfo + " del " + 聽oOrigen:Cargo + CRLF +;
聽 聽 聽 聽 聽 聽"y agregarlo al " + 聽oDestino:Cargo )
聽 聽RETURN NIL

EndIf

If cOrigen == "BRW" .and. cDestino == "LBX"
聽 聽oDestino:Add( uDropInfo)
EndIf
RETURN NIL
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Re: Drag and Drop en un Browse.
Posted: Sat May 07, 2022 10:48 AM
Hola de nuevo

Bueno he retomado este tema y como pens茅 que el problema era que no se podia arrastra de un listbox a un xbrowxe lo probe con xbrowse solo y me doy cuenta que el problema no est谩 en arrastrar de un control a otro sino la posici贸n que ocupan en el dialogo

Si el se arrastra de un xbrowse a la derecha, a la izquierda o abajo no hay problema pero si se arrastra de un xbrowse otro control que est谩 arriba no se ejecuta bDropOver. Supongo que el xBrowse origen est谩 esperando algo ya que no se libera el arrastre hasta que se hace un nuevo click en el browse origen

Alguna idea de que tengo que cambiar para poder arrastra de abajo arriba desde un xbrowse
Gracias

Este es el ejemplo con el que estoy probando

Code (fw): Select all Collapse
#include "Fivewin.ch"

function Main()
聽 聽 Local oDlg
聽 聽 Local oLbx1, oLbx2, oLbx3, cValue, aItems
聽 聽 Local oBrw1, oBrw2, oBrw3
聽 聽 Local oCursor, oOrigen, oDestino

聽 聽 DEFINE CURSOR oCursor drag

聽 聽 aItems := { "UNO", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE" }
聽 聽 DEFINE DIALOG oDlg SIZE 800,600

聽 聽 @ 聽10, 聽10 LISTBOX oLbx1 VAR cValue ITEMS aItems ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 80, 100 PIXEL OF oDlg

聽 聽 @ 聽10, 100 LISTBOX oLbx2 VAR cValue ITEMS {} ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 80, 100 PIXEL OF oDlg

聽 聽 @ 聽10, 300 XBROWSE oBrw1 OF oDlg COLUMNS 1 ;
聽 聽 聽 聽 聽 聽 聽 聽ARRAY { "Item 1","Item 2","Item 3","Item 4" } ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 100, 100 PIXEL

聽 聽 @ 120, 聽10 XBROWSE oBrw2 OF oDlg COLUMNS 1 ;
聽 聽 聽 聽 聽 聽 聽 聽ARRAY { "Item 1","Item 2","Item 3","Item 4" } ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 100, 100 PIXEL

聽 聽 @ 120, 120 XBROWSE oBrw3 OF oDlg COLUMNS 1 ;
聽 聽 聽 聽 聽 聽 聽 聽ARRAY { "Item 11","Item 12","Item 13","Item 14" } ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 100, 100 PIXEL

聽 聽 @ 120, 300 LISTBOX oLbx3 VAR cValue ITEMS {} ;
聽 聽 聽 聽 聽 聽 聽 聽SIZE 80, 100 PIXEL OF oDlg

聽 聽 oBrw1:CreateFromCode()
聽 聽 oBrw2:CreateFromCode()
聽 聽 oBrw3:CreateFromCode()

聽 聽 oLbx1:Cargo := "LBX1"
聽 聽 oLbx2:Cargo := "LBX2"
聽 聽 oLbx3:Cargo := "LBX3"

聽 聽 oBrw1:Cargo := "BRW1"
聽 聽 oBrw2:Cargo := "BRW2"
聽 聽 oBrw3:Cargo := "BRW3"


聽 聽 // DEFINIR DRAG AND DROP


聽 聽 oLbx1:oDragCursor := oCursor
聽 聽 oLbx1:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oLbx1, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oLbx1:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oLbx1, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }

聽 聽 oLbx2:oDragCursor := oCursor
聽 聽 oLbx2:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oLbx2, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oLbx2:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oLbx2, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }

聽 聽 oLbx3:oDragCursor := oCursor
聽 聽 oLbx3:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oLbx3, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oLbx3:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oLbx3, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }

聽 聽 oBrw1:oDragCursor := oCursor
聽 聽 oBrw1:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oBrw1, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oBrw1:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oBrw1, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }

聽 聽 oBrw2:oDragCursor := oCursor
聽 聽 oBrw2:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oBrw2, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oBrw2:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oBrw2, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }

聽 聽 oBrw3:oDragCursor := oCursor
聽 聽 oBrw3:bDragBegin 聽:= { | 聽 聽 聽 聽 聽 聽nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oOrigen := oBrw3, 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetBegin(oOrigen) }
聽 聽 oBrw3:bDropOver 聽 := { | uDropInfo, nRow, nCol, nKeyFlags | ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDestino := oBrw3, 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 SetOver(uDropInfo, nRow, nCol, nKeyFlags, oOrigen, oDestino) }



聽 聽 ACTIVATE DIALOG oDlg CENTER



RETURN .F.

//-----------------------**-----------------------------------------------//
STATIC FUNCTION SetBegin(oOrigen)
/*
Local cOrigen := Left(oOrigen:Cargo, 3)

If cOrigen == "LBX"
聽 聽If len(oOrigen:aItems) >0
聽 聽 聽 SetDropInfo( oOrigen:getSelText() )
聽 聽EndIf
聽 聽RETURN NIL
EndIf

If cOrigen == "BRW"
聽 聽SetDropInfo( oOrigen:aArrayData[oOrigen] )
EndIf
*/

RETURN NIL

//-----------------------**-----------------------------------------------//
STATIC FUNCTION SetOver( uDropInfo, nRow, nCol, nKeyFlags,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oOrigen, oDestino)
Msginfo("Arratrando " + oOrigen:Cargo + " a " + oDestino:Cargo)
RETURN NIL



return nil
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Re: Drag and Drop en un Browse.
Posted: Mon May 09, 2022 03:30 PM
Bueno,
Investigando he llegado a la conclusi贸n de que el problema se encuentra en la clase XBROWSE, concretamente en el m茅todo

Code (fw): Select all Collapse
METHOD LButtonUp( nRow, nCol, nFlags ) CLASS TXBrowse
聽 聽local nCaptured
聽 聽local nRowAdvanced, nTimeScrolled, nVelocity, nRowToAdvance
聽 聽local nRatio, n, cMsg := ""

聽 聽if ::lDrag
聽 聽 聽 return ::Super:LButtonUp( nRow, nCol, nFlags )
聽 聽endif

聽聽 If nRow <= ::nTopBarHeight
聽 聽 聽 return 0
聽 聽endif

...


La soluci贸n que se ma ha ocurrido es agregar

Code (fw): Select all Collapse
聽 聽If nRow <= ::nTopBarHeight .and. ::nTopBarHeight != 0.00
聽 聽 聽 return 0
聽 聽endif

Con esto obtengo el comportamiento desaado, aunque no tengo del todo claro para que se utiliza la variable nTopBarHeight , por lo cual no se si esto me afectar谩 en otra parte, creo que esto es un BUG de esta clase

Agradecer铆a alg煤n comentario al respecto.

Gracias y un saludo

Continue the discussion