Page 1 of 3

Error de pintado Treeview

PostPosted: Sun Aug 17, 2014 10:14 pm
by cuatecatl82
Saludos al foro buenas tardes:

Estoy trabajando un Tree desde un arreglo, lo tengo armado y lo puedo mostrar con bitmaps de 24*24, necesito que cada Item haga una funcion que ya previamente lo he definido desde oitem:Add(), pero no ejecuta nada, además de que presenta errores de pintado al subir y bajar el scroll y al cerrar(-) o abrir(+) los Items :

El fallo en el dibujado lo hace tambien con bitmaps de 16*16 con y sin establecer fuente..

Image

Quisiera saber tambien si es posible usar 2 tipos de fuente, uno para el Item Padre y el otro para los SubItem y como aplicarlo ya que actualmente solo aplica fuente para todo el texto.

Code: Select all  Expand view
# Include "FiveWin.ch"
     
FUNCTION Main()
  ExploDsk()
RETURN Nil


   
FUNCTION ExploDsk()
   
LOCAL oLogo,oCur,oSel,oIco,oDlg,oBtn1,oBtn2,oTree,oFont1,oFont2,oImageList

    DEFINE FONT        oFont1        NAME     "TAHOMA"    BOLD SIZE 00, 18
    DEFINE FONT        oFont2        NAME     "TAHOMA"         SIZE 00, 16
    DEFINE CURSOR      oCur          RESOURCE "FLECHA"
    DEFINE CURSOR      oSel          RESOURCE "MANO"
    DEFINE ICON        oIco          RESOURCE "00"
    DEFINE DIALOG      oDlg          RESOURCE "LISTADO"  TITLE "Listado de Discos" ICON oIco TRANSPARENT
 
   oImageList := TImageList():New(24,24)            
 
   oImageList:Add(TBitmap():DEFINE("VIR1",,oDlg), TBitmap():DEFINE("VIR2",,oDlg))
   oImageList:Add(TBitmap():DEFINE("FLO1",,oDlg), TBitmap():DEFINE("FLO2",,oDlg))
   oImageList:Add(TBitmap():DEFINE("PAR1",,oDlg), TBitmap():DEFINE("PAR2",,oDlg))
   oImageList:Add(TBitmap():DEFINE("HDD1",,oDlg), TBitmap():DEFINE("HDD2",,oDlg))
   oImageList:Add(TBitmap():DEFINE("DVD1",,oDlg), TBitmap():DEFINE("DVD2",,oDlg))
   oImageList:Add(TBitmap():DEFINE("RAM1",,oDlg), TBitmap():DEFINE("RAM2",,oDlg))  
   oImageList:Add(TBitmap():DEFINE("NET1",,oDlg), TBitmap():DEFINE("NET2",,oDlg))
   oImageList:Add(TBitmap():DEFINE("USB1",,oDlg), TBitmap():DEFINE("USB2",,oDlg))
   
   
   
                                   
   oTree:= TTreeView():REDEFINE(100, oDlg, 0, , .F. ,"" )
   oTree:oFont:= oFont2
   oTree:bChanged := {|oTree,oItem| oItem:= oTree:GetSelected(), ;
      IF( oItem # nil .and. ValType( oItem:cargo ) == "B", Eval( oItem:cargo ), nil ) }

   oDlg:lHelpIcon:= .F.
   
   ACTIVATE DIALOG     oDlg          CENTERED   ON INIT(Self, Carga(oTree,oImageList))

RETURN Nil


STATIC FUNCTION Carga(oTree,oImageList)

LOCAL oItem:= oTree
LOCAL oSubItem, item, oParent, i
LOCAL aData:= {{"Unidades Virtuales",      0, 0},;
                 {"Disco 3 1.44 Mb",       1, 1},;
                   {"Volumen 15151441",    2, 2, "Hola 01"},;
                   {"Volumen 84515158",    2, 2, "Hola 02"},;
                   {"Volumen 77722582",    2, 2, "Hola 03"},;
                   {"Volumen 15151441",    2, 2, "Hola 04"},;
                   {"Volumen 84515158",    2, 2, "Hola 05"},;
                   {"Volumen 77722582",    2, 2, "Hola 06"},;
                 {"Discos Duros",          1, 3},;
                   {"Volumen 1",           2, 3},;
                   {"Particion 1",         3, 2, "Hola 07"},;
                   {"Particion 2",         3, 2, "Hola 08"},;
                   {"Particion 3",         3, 2, "Hola 09"},;
                   {"Volumen 2",           2, 3},;
                   {"Particion 1",         3, 2, "Hola 10"},;
                   {"Particion 2",         3, 2, "Hola 11"},;
                 {"Disco CD-DVD RAM",      1, 4},;
                   {"Volumen 15151441",    2, 2, "Hola 12"},;
                   {"Volumen 45481278",    2, 2, "Hola 13"},;
                   {"Volumen 89612255",    2, 2, "Hola 14"},;
                 {"Unidades Virtuales RAM",1, 5},;
                   {"Volumen 15151441",    2, 2, "Hola 15"},;
                   {"Volumen 45481278",    2, 2, "Hola 16"},;
                   {"Volumen 89612255",    2, 2, "Hola 17"},;
                 {"Unidades de Red",       1, 6},;
                   {"Volumen 45481278",    2, 2, "Hola 18"},;
                 {"Discos USB",            1, 7},;
                   {"Volumen 1",           2, 2, "Hola 19"},;
                   {"Volumen 2",           2, 2, "Hola 20"}}

     
FOR each item in aData
      IF item[2] > 0
        IF item[2] > oSubItem:Cargo["level"]
           oItem = oSubItem
        ELSEIF item[2] == oSubItem:Cargo["level"]
            oItem = oSubItem:oParent
        ELSE
           oParent = oSubItem:oParent
           FOR i = oSubItem:Cargo["level"] TO item[2] + 1 step -1
              oParent = oParent:oParent
           NEXT
           oItem = oParent
        ENDIF
      ENDIF
      oSubItem:= oItem:Add(item[1], item[3], {|| MSGInfo(item[4]) })
      oSubItem:Cargo:= { "level" => item[2] }
NEXT

oTree:SetImageList(oImageList)
oTree:Expand()

RETURN Nil

Image

No entiendo porque no hace nada al seleccionar el item, les dejo el exe y la fuente para que prueben lo que comento..

https://www.mediafire.com/?vyjay69clj33ptg

Saludos y Gracias por leer mi solicitud.

Re: Error de pintado Treeview

PostPosted: Mon Aug 18, 2014 1:57 pm
by Antonio Linares
Victor,

Prueba esto para ver si asi se repinta bien al expandir las ramas:

oTree:bExpanded = { || oTree:Refresh() }

Para ejecutar la acción de cada item, estas usando algo asi ?

oTree:bChanged = { || MsgInfo( oTree:GetSelected():cPrompt ) }

Re: Error de pintado Treeview

PostPosted: Mon Aug 18, 2014 2:07 pm
by Antonio Linares
Victor,

Puedes enviarme tu email actual a alinares@fivetechsoft.com, gracias :-)

Re: Error de pintado Treeview

PostPosted: Mon Aug 18, 2014 3:06 pm
by cuatecatl82
Maestro ya le envie mi email..

Code: Select all  Expand view
oTree:bExpanded = { || oTree:Refresh() }


Me genera error:
Error BASE/1005 Message not found: TTREEVIEW:_BEXPANDED


La unica forma que encontre de repintar el Treeview es refrescando el dialogo
Code: Select all  Expand view
oTree:OnClick = { | nRow, nCol | oDlg:Refresh() }

pero no me gusta porque todos los controles parpadean..

Re: Error de pintado Treeview

PostPosted: Mon Aug 18, 2014 9:21 pm
by Antonio Linares
Victor,

Y si pruebas asi:

oTree:OnClick = { | nRow, nCol | oTree:Refresh() }

Re: Error de pintado Treeview

PostPosted: Mon Aug 18, 2014 9:37 pm
by cuatecatl82
No lo refresca o actualiza..

Como poder asignarle la funcion de refresco como cualquier otro control..?

Re: Error de pintado Treeview

PostPosted: Mon Aug 18, 2014 9:43 pm
by Antonio Linares
Victor,

Si revisas samples/classtree.prg verás que usamos:

oTree:bExpanded = { | hItem | MsgInfo( oTree:GetItem( hItem ):cPrompt ) }

Luego tu aplicación debería aceptar esa DATA salvo que estés usando una versión antigua de FWH.

Desde ahi podrias hacer oTree:SysRefresh()

Re: Error de pintado Treeview

PostPosted: Mon Aug 18, 2014 10:48 pm
by cuatecatl82
No pues ahi me quede, no tengo esa linea en samples/classtree.prg, sigo probando porque ahora me estoy liando con el scroll que tampoco actualiza al desplazarse, en el METHOD VScroll( nWParam, nLParam ) VIRTUAL, no hay dada que pueda definir ahi..
y a la vez que sigo buscando como ejecutar mi bloque de cógido ya que no lo esta ejecutando..

Ups...me ahogo en un vaso de agua jejeje,

Re: Error de pintado Treeview

PostPosted: Mon Aug 18, 2014 11:14 pm
by Antonio Linares
Victor,

Que versión de FWH usas ?

Re: Error de pintado Treeview

PostPosted: Tue Aug 19, 2014 12:03 am
by cuatecatl82
11.11 bastante atrasado..

Re: Error de pintado Treeview

PostPosted: Tue Aug 19, 2014 12:38 am
by Antonio Linares
Por eso que no encontraba esa DATA

Re: Error de pintado Treeview

PostPosted: Tue Aug 19, 2014 1:50 am
by cuatecatl82
El error de pintado es bastante grande por lo que parece, no se si en versiones recientes este solucionado,

Acabo de probar poniendo items largos y al mover el scrolls vertical y horizontal pasa esto..

Image

Que lio...!! :shock: :shock: :shock: :cry: :cry: :cry:

Re: Error de pintado Treeview

PostPosted: Tue Aug 19, 2014 2:44 am
by Antonio Linares
Victor,

Puedes proporcionarme un PRG de ejemplo para probarlo aqui ? gracias

Re: Error de pintado Treeview

PostPosted: Tue Aug 19, 2014 3:18 am
by cuatecatl82
Aqui en ejemplo en exe y prg

https://www.mediafire.com/?6jbqv6l623equ0k

Re: Error de pintado Treeview

PostPosted: Tue Aug 19, 2014 9:34 am
by Antonio Linares
Victor,

Acabo de construirlo con FWH 14.07 y funciona correctamente :-)

Puedes descargar mi EXE para probarlo desde aqui:
https://bitbucket.org/fivetech/fivewin-contributions/downloads/explorar.zip