Page 1 of 1

Tree. Intercambio de posiciones

Posted: Mon Feb 03, 2014 3:04 pm
by Carles
Hola a todos,

Alguien sabe como podria hacer un intercambiar de posiciones en un Tree ? (Por ejemplo pasar el Item1 a la posicion del 3)

Code: Select all

#include "FiveWin.ch" 

FUNCTION Main()

   local oWnd, oTree, oItem1
   local oChild1,oChild2,oChild3

   DEFINE WINDOW oWnd FROM 3, 6 TO 20, 70 COLOR "N/W"

      oTree := TTreeView():New( 2, 0, oWnd )

      oItem1 := oTree:Add( "Page - 1", 1 )

        oChild1 := oItem1:Add( "Item 1", 1 )
        oChild2 := oItem1:Add( "Item 2", 1 )
        oChild3 := oItem1:Add( "Item 3", 1 )

      oWnd:oClient := oTree

   ACTIVATE WINDOW oWnd

RETU NIL
Gracias !!!

Re: Tree. Intercambio de posiciones

Posted: Mon Feb 03, 2014 4:21 pm
by informaticaeloy
Hola, no se si te funcionaría algo como guardar oChild1 := oItem1:Add( "Item 1", 1 ) en un temporal, luego poner en el 1 el 3 y el temporal en el 1:

Code: Select all

local oWnd, oTree, oItem1
local oChild1,oChild2,oChild3,oTMP

oTMP    := oChild1
oChild1 := oChild3
oChild3 := oTMP

oTree : Update()

 
 
No se si funcionaría, no lo he probado. Un saludo.

Re: Tree. Intercambio de posiciones

Posted: Tue Feb 04, 2014 8:28 am
by Carles
Esta forma no nunciona, gracias.

Re: Tree. Intercambio de posiciones

Posted: Tue Feb 04, 2014 9:32 am
by informaticaeloy
Hola, prueba esto a ver:

Code: Select all


oChild3 := oItem1:SetText("Item 3")
oChild1 := oItem1:SetText("Item 1")

 

Re: Tree. Intercambio de posiciones

Posted: Tue Feb 04, 2014 9:41 am
by Carles
Hola,

No quiero cambiar solo el texto, sino todo el objeto en si (cargo, imagen, texto, ...)


Gracias.
C.

Re: Tree. Intercambio de posiciones

Posted: Fri Feb 14, 2014 6:17 pm
by Sebastián Almirón
Hola Carles, estoy utilizando MyRpt, ante todo muchas gracias por compartir tu trabajo.

El caso es que con lo del cambio de posiciones he notado que el orden de impresión es el del tree de oInspect, con lo cual si metemos una imagen nueva como fondo, se coloca la última y hace que lo que haya antes no se imprima.

De momento he hecho estas modificaciones a los métodos PosTop() y PosBottom() de TRptForm, con ello consigo que cuando pulso el botón traer al frente, se coloque el último del tree y cuando pulso el botón llevar al fondo, se coloque el primero. Creo que es un poco chapuzo, falta depurarlo, eso para el lunes, pero de momento me sirve.

Saludos

*-----------------------------------
METHOD PosTop( oObj) CLASS TRptForm
*-----------------------------------
local oitemact

IF !::lFocus
RETU NIL
ENDIF

IF oObj == NIL
oObj := ::oControlItem:oObj
ENDIF

IF ValType( oObj ) <> 'O'
RETU NIL
ENDIF

oObj:CoorsUpdate()

SetWindowPos( oObj:hWnd, HWND_TOP ,;
oObj:nTop, oObj:nLeft ,;
oObj:nWidth, oObj:nHeight )

if ::lactive
oitemact := ::oControlItem
::additem(oitemact:ntop, oitemact:nleft)
::oControlItem := oitemact
::oRpt:oInspect:DeleteItem(oitemact)
::oRpt:oInspect:AddItem(oitemact)
endif


RETU NIL

*--------------------------------
METHOD PosBottom() CLASS TRptForm
*--------------------------------
LOCAL oObj := ::oControlItem:oObj, oitemact, aitems, nI, oitemsel, csection

IF ValType( oObj ) <> 'O'
RETU NIL
ENDIF

oObj:CoorsUpdate()

SetWindowPos( oObj:hWnd, HWND_BOTTOM ,;
oObj:nTop, oObj:nLeft ,;
oObj:nWidth, oObj:nHeight )


if ::lactive

cSection := ::oControlItem:cSection
citemsel := ::oControlItem:cID
aItems := ::oRpt:oInspect:GetItemsSection( cSection )

for nI := 1 To Len( aItems )
if aitems[nI]:cID <> citemsel
oitemact := aitems[nI]
::additem(oitemact:ntop, oitemact:nleft)
::oControlItem := oitemact
::oRpt:oInspect:DeleteItem(oitemact)
::oRpt:oInspect:AddItem(oitemact)
endif
next nI
endif

RETU NIL