Error de pintado Treeview

Re: Error de pintado Treeview

Postby Antonio Linares » Tue Aug 19, 2014 9:44 am

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!
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42081
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error de pintado Treeview

Postby cuatecatl82 » Tue Aug 19, 2014 12:59 pm

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..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Error de pintado Treeview

Postby cuatecatl82 » Tue Aug 19, 2014 7:29 pm

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..?
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Error de pintado Treeview

Postby cuatecatl82 » Tue Aug 19, 2014 8:41 pm

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..?
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Error de pintado Treeview

Postby cuatecatl82 » Wed Aug 20, 2014 1:04 am

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..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Error de pintado Treeview

Postby Antonio Linares » Wed Aug 20, 2014 1:18 am

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 :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42081
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error de pintado Treeview

Postby Antonio Linares » Wed Aug 20, 2014 1:20 am

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! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42081
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error de pintado Treeview

Postby Antonio Linares » Wed Aug 20, 2014 1:31 am

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 :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42081
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error de pintado Treeview

Postby cuatecatl82 » Wed Aug 20, 2014 3:25 am

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.
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Error de pintado Treeview

Postby Antonio Linares » Wed Aug 20, 2014 5:26 am

Victor,

Pero que código es el que quieres que se ejecute ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42081
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error de pintado Treeview

Postby cuatecatl82 » Wed Aug 20, 2014 12:22 pm

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..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Error de pintado Treeview

Postby Antonio Linares » Wed Aug 20, 2014 3:25 pm

Victor,

Aqui le estás asignando un hash:

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42081
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error de pintado Treeview

Postby cuatecatl82 » Thu Aug 21, 2014 4:16 am

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..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Error de pintado Treeview

Postby cuatecatl82 » Fri Aug 22, 2014 3:34 am

Nadie lo ha probado??
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Error de pintado Treeview

Postby Antonio Linares » Fri Aug 22, 2014 4:06 am

Victor,

Lo acabo de probar.

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42081
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

PreviousNext

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 31 guests