FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Tree. Intercambio de posiciones
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Tree. Intercambio de posiciones
Posted: Mon Feb 03, 2014 03:04 PM
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 (fw): Select all Collapse
#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 !!!
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 118
Joined: Fri Dec 20, 2013 10:39 AM
Re: Tree. Intercambio de posiciones
Posted: Mon Feb 03, 2014 04:21 PM
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 (fw): Select all Collapse
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.
Windows 10 + FWH 20.08 + BCC 7.4 + Harbour 3.2.0 + PSPad 5.0.3
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Tree. Intercambio de posiciones
Posted: Tue Feb 04, 2014 08:28 AM

Esta forma no nunciona, gracias.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 118
Joined: Fri Dec 20, 2013 10:39 AM
Re: Tree. Intercambio de posiciones
Posted: Tue Feb 04, 2014 09:32 AM
Hola, prueba esto a ver:

Code (fw): Select all Collapse
oChild3 := oItem1:SetText("Item 3")
oChild1 := oItem1:SetText("Item 1")
Windows 10 + FWH 20.08 + BCC 7.4 + Harbour 3.2.0 + PSPad 5.0.3
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Tree. Intercambio de posiciones
Posted: Tue Feb 04, 2014 09:41 AM

Hola,

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

Gracias.
C.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
Re: Tree. Intercambio de posiciones
Posted: Fri Feb 14, 2014 06:17 PM

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

Continue the discussion