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

oTree:bChanged := {|oTree,oItem| oItem := oTree:GetSelected(), ;
IF( oItem # nil .and. ValType( oItem:cargo ) == "B", Eval( oItem:cargo ), nil ) }oSubItem:= oItem:Add(item[1], item[3], {|| MSGInfo("Hola") })FUNCTION IsAppThemed()
RETURN .F.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..
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! ![]()
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 ![]()
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"}]oSubItem:= oItem:Add(item[1], item[3], {|| LeeItem(item[4]) })
...
...
Function LeeItem(cValor)
Return Msginfo(cValor)Victor,
Pero que c贸digo es el que quieres que se ejecute ?
oItem:Add( cPrompt, nImage, nValue } )
oItem:Add( "Volumen 15151441", 2, "F78T47D" )
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"}}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 NilIF(!EMPTY(item[4]),(oSubItem:= oItem:Add(item[1], item[3], {{|| LeeSerie(item[4]) }})),(oSubItem:= oItem:Add(item[1], item[3])))Victor,
Aqui le est谩s asignando un hash:
oSubItem:Cargo:= { "level" => item[2] }
# 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
Nadie lo ha probado??
Victor,
Lo acabo de probar.
Dime exactamente que quieres que haga la aplicaci贸n. Ponme un ejemplo por favor, gracias ![]()