Page 2 of 3

Re: Error de pintado Treeview

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

Tu ejemplo es muy bonito, si me proporcionas el fichero RC y los bitmaps con sus nombres, lo podriamos incluir como un ejemplo de FWH :-)

gracias!

Re: Error de pintado Treeview

PostPosted: Tue Aug 19, 2014 12:59 pm
by cuatecatl82
Maestro Gracias por su comentario, aun falta pulir para que sea un ejemplo funcional pues aún no ejecuta el bloque de código asignado desde oItem:Add(), aqui le envio los bmp y el rc.
https://www.mediafire.com/?9ecqvq06w1ehvcl

Le comento que probe su ejemplo y tiene el fallo del pintado del scroll horizontal..

Una vez ejecutada -> Seleccione "Unidades Virtuales RAM" -> Mueva el Scroll Horizontal a la derecha para leer completo el Item y regresela con el mouse a la posisción original, se produce el mismo barrido de los bmps..

El barrido del scroll Vertical no se presenta, es correcto, pero el del scroll Horizontal sigue..

Re: Error de pintado Treeview

PostPosted: Tue Aug 19, 2014 7:29 pm
by cuatecatl82
Despues de batallar medio dia encontre lo siguiente:

El culpable del mal pintado son los temas de XP, toque algunos methodos de la clase pero no dio resultado, al final desidi quitar el tema de XP y funciono..

Image

Ahora, como poder corregir el error en base a los temas..?? Alguna idea..?

Re: Error de pintado Treeview

PostPosted: Tue Aug 19, 2014 8:41 pm
by cuatecatl82
El otro problema que me trae liado es que no puedo hacer que se ejecute una acción si hay un bloque de código establecido..

Code: Select all  Expand view
oTree:bChanged := {|oTree,oItem| oItem := oTree:GetSelected(), ;
      IF( oItem # nil .and. ValType( oItem:cargo ) == "B", Eval( oItem:cargo ), nil ) }


Code: Select all  Expand view
oSubItem:= oItem:Add(item[1], item[3], {|| MSGInfo("Hola") })


Al hacer click en los items no ejecuta nada.. he perdido parter del dia con estos detalles sin avanzar..

Alguna Solución..?

Re: Error de pintado Treeview

PostPosted: Wed Aug 20, 2014 1:04 am
by cuatecatl82
Comentando de nuevo, despues de unas aspirinas y de dar un paseo en coche regrese con animos recargados y he podido solucionar el primer problema de pintado.. agregando esto:

Code: Select all  Expand view
FUNCTION IsAppThemed()
RETURN .F.


Tomado desde aqui despues de revisar varios mensajes y de darle vuelta al asunto:
http://forums.fivetechsupport.com/viewtopic.php?f=3&t=23387&hilit=isappthemed


Toca ahora revisar el detalle de ejecutar el bloque de código al hacer click en el item.. Sigo revisando paso a paso con mis aspirinas a lado y las laves del carro por si se ofrece refrescar las ideas..

Re: Error de pintado Treeview

PostPosted: Wed Aug 20, 2014 1:18 am
by Antonio Linares
Victor,

cuatecatl82 wrote:Maestro Gracias por su comentario, aun falta pulir para que sea un ejemplo funcional pues aún no ejecuta el bloque de código asignado desde oItem:Add(), aqui le envio los bmp y el rc.
https://www.mediafire.com/?9ecqvq06w1ehvcl

Le comento que probe su ejemplo y tiene el fallo del pintado del scroll horizontal..

Una vez ejecutada -> Seleccione "Unidades Virtuales RAM" -> Mueva el Scroll Horizontal a la derecha para leer completo el Item y regresela con el mouse a la posisción original, se produce el mismo barrido de los bmps..

El barrido del scroll Vertical no se presenta, es correcto, pero el del scroll Horizontal sigue..


Visto el error, gracias. A ver si damos con la solución, de hecho tenemos que implementar un TreeView en EasyReport.

Gracias por los recursos :-)

Re: Error de pintado Treeview

PostPosted: Wed Aug 20, 2014 1:20 am
by Antonio Linares
Victor,

No tienes los bitmaps con sus nombres ?

Me refiero a dvd.bmp, dvdmask.bmp, floppy.bmp, floppymask.bmp, ...

Si me los pudieses proporcionar asi te lo agradecería mucho, puesto que sería lo más conveniente para incluirlos en FWH, gracias! :-)

Re: Error de pintado Treeview

PostPosted: Wed Aug 20, 2014 1:31 am
by Antonio Linares
Victor,

Acabo de probar este código y lo que tienes en Cargo es un hash:

oTree:bChanged := {|oTree,oItem| oItem:= oTree:GetSelected(), MsgInfo( ValType( oItem:Cargo ) ) }

Tu esperas un codeblock, pero no asignastes un codeblock ahi :-)

Re: Error de pintado Treeview

PostPosted: Wed Aug 20, 2014 3:25 am
by cuatecatl82
Cierto lo acabo de analizar paso a paso y VALTYPE() devuelve "H" que es un Hash por eso no ejecuta nada.

Como hacer que hacer que reciba un codeblock o un parametro en texto para que desde el codeblock lo ejecute..?


Mi idea es enviar un parametro en texto para que la función dentro del codeblock ejecute:
por ejemplo armar y enviar así:

Code: Select all  Expand view
LOCAL aData:= {{"Unidades Virtuales",      0, 0, ""},;
                 {"Disco 3 1.44 Mb",          1, 1, ""},;
                   {"Volumen 15151441",    2, 2, "hola"},;
                   {"Volumen 84515158",    2, 2, "mundo"},;
                   {"Volumen 77722582",    2, 2, "aqui"},;
                   {"Volumen 15151441",    2, 2, "estoy"},;
                   {"Volumen 84515158",    2, 2, ""},;
                   {"Volumen 77722582",    2, 2, "estoy"}]


y evaluar de esta manera:

Code: Select all  Expand view
oSubItem:= oItem:Add(item[1], item[3], {|| LeeItem(item[4]) })
...
...

Function LeeItem(cValor)
Return Msginfo(cValor)

 


El detalle esta en el armado del Tree que no se como enviar un Codeblock en vez deun Hash..

Necesito algun ejemplo para poderlo aplicar..

Saludos.

Re: Error de pintado Treeview

PostPosted: Wed Aug 20, 2014 5:26 am
by Antonio Linares
Victor,

Pero que código es el que quieres que se ejecute ?

Re: Error de pintado Treeview

PostPosted: Wed Aug 20, 2014 12:22 pm
by cuatecatl82
Buen dia a todos:

Mi idea es esta, siguiendo los paramentros de el Metodo ADD() de Treeview
oItem:Add( cPrompt, nImage, nValue } )
oItem:Add( "Volumen 15151441", 2, "F78T47D" )

que armado desde un arreglo que esta sí:


Code: Select all  Expand view
LOCAL aData:= {{"Unidades Virtuales",      0, 0},;
                 {"Disco 3 1.44 Mb",       1, 1},;
       Aqui  --->  {"Volumen 15151441",    2, 2, "F78T47D"},;
                   {"Volumen 84515158",    2, 2, "GG5534T"},;
                 {"Discos Duros",          1, 3},;
                   {"Volumen 1",           2, 3},;
                   {"Particion 1",         3, 2, "HD487RY552"},;
                   {"Particion 2",         3, 2, "WD$JO1931"},;
                   {"Particion 3",         3, 2, "ST458GH59P"},;
                   {"Volumen 2",           2, 3},;
                   {"Particion 1",         3, 2, "EGTYUYO72},;
                   {"
Particion 2",         3, 2, "TTRH455123"}}
 


Entonces Add() Item quedaria así:

Code: Select all  Expand view
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
     
      IF(!EMPTY(item[4]),(oSubItem:= oItem:Add(item[1], item[3], {{|| LeeSerie(item[4]) }})),(oSubItem:= oItem:Add(item[1], item[3])))      
      oSubItem:Cargo:= { "level" => item[2] }

NEXT

STATIC FUNCTION LeeSerie(cSerie)
MSGInfo(cSerie)
RETURN Nil
 


Si pueden observar estoy condicionando y asignando un bloque de código si item[4] tiene un valor..
Code: Select all  Expand view
IF(!EMPTY(item[4]),(oSubItem:= oItem:Add(item[1], item[3], {{|| LeeSerie(item[4]) }})),(oSubItem:= oItem:Add(item[1], item[3])))


Eso es lo que necesito que el Treeview se arme en base a niveles establecidos desde item[2], y si hay un valor en el item[4] que arme las ramas y establesca un codigo a ejecutarse..

No tiendo porque oTree:bChanged := {|oTree,oItem| oItem:= oTree:GetSelected(), MsgInfo( ValType( oItem:Cargo ) ) } devuelve un Hash cuando le estoy enviando un Codeblok o Nil segun el caso..


Que estoy haciendo mal..?, Necesito hacer lo que hace testtre2.prg de la carpeta samples.

La lógica es oItem1:Add( "xBase & OOPS", 1, {|| Test1( oDlg ) } ) como en el ejemplo pero aqui no lo aplica.. No me queda claro que es un Hash..

Re: Error de pintado Treeview

PostPosted: Wed Aug 20, 2014 3:25 pm
by Antonio Linares
Victor,

Aqui le estás asignando un hash:

oSubItem:Cargo:= { "level" => item[2] }

Re: Error de pintado Treeview

PostPosted: Thu Aug 21, 2014 4:16 am
by cuatecatl82
Dos dias de revision y avanzo a paso lento:

Ya tengo algo que más o menos funciona, ya ejecuta el bloque de código, pero no donde debe y tampoco lo que tiene asignado, de alguna forma que no entiendo lo ordena y hace un desastre, aqui el código..


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, 16
    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
 
   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("INT1",,oDlg), TBitmap():DEFINE("INT2",,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:= oFont1
   oTree:OnClick:=  {| nRow,  nCol | oTree:Refresh() }
   oTree:bChanged:= {| oTree, oItem| oItem:= oTree:GetSelected(), ;
                      MSGInfo(VALTYPE( oItem:cargo )),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,oFont2))

RETURN Nil


STATIC FUNCTION Carga(oTree,oImageList,oFont2)
LOCAL oItem1, oItem2

LOCAL oItem:= oTree
LOCAL oSubItem, item, oParent, i
LOCAL aData:= {{"Unidades Virtuales",      0, 0, Nil},;
                 {"Disco 3 1.44 Mb",       1, 1, Nil},;
                   {"Volumen 15151441",    2, 2, "uno"},;
                   {"Volumen 84515158",    2, 2, "dos"},;
                   {"Volumen 77722582",    2, 2, "tres"},;
                   {"Volumen 15151441",    2, 2, "cuatro"},;
                   {"Volumen 84515158",    2, 2, "cinco"},;
                   {"Volumen 77722582",    2, 2, "seis"},;
                 {"Discos Duros",          1, 3, Nil},;
                   {"Volumen 1",           2, 4, Nil},;
                   {"Particion 1",         3, 2, "siete"},;
                   {"Particion 2",         3, 2, "ocho"},;
                   {"Particion 3",         3, 2, "nueve"},;
                   {"Volumen 2",           2, 4, Nil},;
                   {"Particion 1",         3, 2, "diez"},;
                   {"Particion 2",         3, 2, "once"},;
                 {"Disco CD-DVD RAM",      1, 5, Nil},;
                   {"Volumen 15151441",    2, 2, "doce"},;
                   {"Volumen 45481278",    2, 2, "trece"},;
                   {"Volumen 89612255",    2, 2, "catorce"},;
                 {"Unidades Virtuales RAM",1, 6, Nil},;
                   {"Volumen 15151441",    2, 2, "quince"},;
                   {"Volumen 45481278 Haber si funciona el Scroll",    2, 2, "diesiseis"},;
                   {"Volumen 89612255",    2, 2, "diesisiete"},;
                 {"Unidades de Red",       1, 7, Nil},;
                   {"Volumen 45481278",    2, 2, "diesiocho"},;
                 {"Discos USB",            1, 8, Nil},;
                   {"Volumen 1",           2, 2, "diesinueve"},;
                   {"Volumen 2",           2, 2, "veinte"}}

   
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])
      oSubItem:Cargo:= {"level" => Item[2]}
      oItem:Cargo:= IF(!EMPTY(Item[4]),({|| LeeSerie(Item[4]) }),(Nil))
NEXT

oTree:SetImageList(oImageList)
oTree:Expand()
oTree:GoTop()


RETURN Nil

STATIC FUNCTION LeeSerie(cSerie)
MSGInfo(cSerie)
RETURN Nil


La idea es que al hacer click en los items señalados haga una funcion pre-establecida:
Image

Aqui el Exe y la fuente para que lo examinen:
https://www.mediafire.com/?lu36y6ozi54w5b6

Saludos..

Re: Error de pintado Treeview

PostPosted: Fri Aug 22, 2014 3:34 am
by cuatecatl82
Nadie lo ha probado??

Re: Error de pintado Treeview

PostPosted: Fri Aug 22, 2014 4:06 am
by Antonio Linares
Victor,

Lo acabo de probar.

Dime exactamente que quieres que haga la aplicación. Ponme un ejemplo por favor, gracias :-)