Crear Tree en Xbrowse

Crear Tree en Xbrowse

Postby leandro » Wed Aug 07, 2013 3:14 am

Buena noche para todos...

que molestarlos con tantas preguntas, pero es que estoy haciendo unos cambios al sistema y requiero de cierta información.

Como dice el encabezado, necesito crear un tree con xbrowse de dos niveles... he visto varios ejemplos en el foro pero la
verdad es que no se por donde empezar, la verdad requiero de un ejemplo facil que pueda entender para así aprender
la metologia del funcionamiento del xbrowse tree y ahi si meterme a un nivel mas complicado.

Saludos a todos
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1485
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Crear Tree en Xbrowse

Postby cuatecatl82 » Wed Aug 07, 2013 3:55 am

Lenadro:

Mira checa estos enlaces:

http://forums.fivetechsupport.com/viewtopic.php?f=6&t=26898
http://forums.fivetechsupport.com/viewtopic.php?f=6&t=26932

La forma más facil de armar un árbol de directorios es usando XBrowse, no te complicas la vida.

Te dejo unas funciones que arme y que te dan uno a uno toda la estructura del disco, ya sean archivos o carpetas con atributos de solo lectura, de sistema y ocultos..


DirectoryRecurse("C:\*","DHS") //-> funcion propia de (x)Harbour y Harbour
ArbolDir("C:") //---> Mi función, aqui la comparto..

Code: Select all  Expand view
#INCLUDE "fivewin.CH"
#INCLUDE "DIRECTRY.CH"

STATIC aTree:= {}

#IfNDef __XHARBOUR__
FUNCTION DbSkipper( n ) ; RETURN __DbSkipper( n )
FUNCTION DBPACK() ; RETURN __DbPack()
FUNCTION DBZAP() ; RETURN hb_DBZap()
FUNCTION CurDrive( x ) ; RETURN hb_CurDrive( x )
#EndIf


FUNCTION ArbolDir(cDir)

LOCAL cletra:= UPPER(cDir)
LOCAL  aDirs:= DirTree(cletra)
LOCAL N

IF LEN(aDirs) > 0
  FOR N:= 1 TO LEN(aDirs)
    MSGStop("Direcorio: " + aDirs[N,1] +CRLF+;
            "Origen: " + aDirs[N,2] +CRLF+;
            "Tamaño: " + aDirs[N,3] +CRLF+;
            "Creado: " + aDirs[N,4] +CRLF+;
            "Hora: " + aDirs[N,5] +CRLF+;
            "Atributos: " + aDirs[N,6]+"","TREEDIR")
  NEXT
 MSGInfo(ALLTRIM(STR(LEN(aDirs)))+" Carpetas Encontrados", "DIRTREE")
ELSE
 MSGStop("Disco "+cletra+" no Válido o Vacio", "DIRTREE")
ENDIF

RETURN Nil




//------------------------------------------------------------------------------------------------------------------//
FUNCTION DirTree(cDir)

LOCAL aSubDirs,nLen,i

aSubDirs:= GetTreeSubDirs(DIRECTORY(cDir+"\*.*","DHS"),cDir)
    nLen:= LEN(aSubDirs)

IF nLen > 0
   FOR I:= 1 TO nLen
      AADD(aTree,{aSubDirs[I,1],aSubDirs[I,2],aSubDirs[I,3],aSubDirs[I,4],aSubDirs[I,5],aSubDirs[I,6]})
      CURDRIVE(LEFT(aSubDirs[I,1],1))
      CURDIR(aSubDirs[I,1])
      DirTree(aSubDirs[I,1])
   NEXT
ENDIF


RETURN aTree




//------------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION GetTreeSubDirs(aDirs,cDir)

LOCAL N
LOCAL    nLen:= LEN(aDirs)
LOCAL aDirVal:= {}

IF nLen > 0
   FOR N:= 1 TO nLen
     IF LEFT(aDirs[N][1],1) <> "."
        IF aDirs[N][5] == 'D' .OR. aDirs[N][5] == 'RD' .OR. aDirs[N][5] == 'RHD' .OR. aDirs[N][5] == 'RHSD' .OR. aDirs[N][5] == 'HSD' .OR. aDirs[N][5] == 'SD' .OR. aDirs[N][5] == 'HD' .OR. aDirs[N][5] == 'RSD' .OR. aDirs[N][5] == 'RHDA' .OR. aDirs[N][5] == 'SDA' .OR. aDirs[N][5] == 'HSDA' .OR. aDirs[N][5] == 'RHSDA'
           AADD(aDirVal,{cDir + "\" + aDirs[N,F_NAME], cFilePath(cDir + "\" + aDirs[N,F_NAME]), Espacio(cDir + "\" + aDirs[N,F_NAME]), aDirs[N,F_DATE], aDirs[N,F_TIME], aDirs[N,F_ATTR]})
        ENDIF
     ENDIF
   NEXT
ENDIF

RETURN aDirVal




//------------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION Espacio(cDir)

LOCAL cSize, N
LOCAL nSize:= 0
LOCAL ADirs:= DIRECTORY(cDir+"
\*.*",'DHS')
LOCAL nFound:= LEN(ADirs)

IF nFound > 0
   FOR N:= 1 TO nFound
     nSize:= nSize + ADirs[N,F_SIZE]
   NEXT
   cSize:= Format(nSize,.T.)
ELSE
   cSize:= "
Vacio"
ENDIF


RETURN cSize




//------------------------------------------------------------------------------------------------------------------//
FUNCTION Format(nValue,lShortFormat)

LOCAL cTmp := "
Bytes"
LOCAL nBT, nKB, nMB, nGB, nTB, nPB


  nBT := 1024
  nKB := nBT * nBT
  nMB := nKB * nBT
  nGB := nMB * nBT
  nTB := nGB * nBT
  nPB := nTB * nBT

  IF lShortFormat

     DO CASE
        CASE nValue < nBT
             cTmp   := "
Bytes"

        CASE nValue > nBT .AND. nValue < nKB

             cTmp   := "
KB"
             nValue := nValue / nBT

        CASE nValue > nKB .AND. nValue < nMB

             cTmp   := "
MB"
             nValue := nValue / nKB

        CASE nValue > nMB .AND. nValue < nGB

             cTmp   := "
GB"
             nValue := nValue / nMB

        CASE nValue > nGB .AND. nValue < nTB

             cTmp   := "
TB"
             nValue := nValue / nGB

        CASE nValue > nTB .AND. nValue < nPB

             cTmp   := "
PB"
             nValue := nValue / nTB

        OTHERWISE

             cTmp   := "
N/D"
             nValue := nValue / ( nPB * nPB )

     ENDCASE

  ENDIF

RETURN ALLTRIM(TRANSFORM(nValue,"
999,999,999,999.99")) + cTmp



en la caprte samples tambien hay ejemplos, checa xbrwdisk.prg, treeview.prg, treelst.prg.tambien puedes armar la estructura del disco con lasclases Treeview y ListView, pero no me convencieron para lo que necesitaba.

Comentanos más sobre lo que necesitas, espero haber ayudarte un poco... :wink: :roll: :P :P

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


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 33 guests