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..
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
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.