FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Búsqueda en un tree montado en un xBrowse
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Búsqueda en un tree montado en un xBrowse
Posted: Sat Dec 27, 2014 01:10 PM

Colegas, necesito hacer una búsqueda en un tree y no tengo idea como empezar. He buscado en el foro pero no encontré nada. Alguien tiene idea ? Muchísimas gracias.

Saludos

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Sat Dec 27, 2014 10:27 PM

A ver si te sirve de algo

viewtopic.php?f=3t=27195hilit=otree#p151079

&&

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Tue Dec 30, 2014 12:00 PM

oBrw:oTree:Find( cSeek )

Regards



G. N. Rao.

Hyderabad, India
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Tue Dec 30, 2014 02:22 PM

Rao, thanks for your reply, I tried your suggestion but does not work. Remains to be something else ?

Saludos

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Tue Dec 30, 2014 04:22 PM

Horacio,

Que buscas en el Tree ? Un texto ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Tue Dec 30, 2014 07:31 PM

Antonio, así es. Es un tree sección -> curso -> alumnos. Alguna idea por donde empezar ? Muchas gracias

Saludos

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Tue Dec 30, 2014 10:49 PM

If you can provide a small sample program we can compile and build at our end and explain what you want to seek/find, we shall help you with suitable solution.

Regards



G. N. Rao.

Hyderabad, India
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Wed Dec 31, 2014 08:03 AM

Horacio,

Precisamente necesito esa funcionalidad para las mejoras que estoy haciendo en FWH\samples\fivedit.prg (antes sciedit.prg)

Por lo que hoy mismo implementaré un nuevo método que te permitirá hacer eso exactamente :-)

Tan pronto lo tenga listo lo publico aqui :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Wed Dec 31, 2014 11:42 AM
Horacio,

Tienes que añadir este nuevo método a la Clase TTreeView:

Code (fw): Select all Collapse
METHOD Scan( bAction ) CLASS TTreeView

return ScanItemsBlock( ::aItems, bAction )


Code (fw): Select all Collapse
static function ScanItemsBlock( aItems, bAction ) 

   local oItem, n := 1, nResult := 0

   while n <= Len( aItems ) .and. nResult == 0
      oItem = aItems[ n ]
      if Eval( bAction, oItem )
         return n
      else
         if Len( oItem:aItems ) > 0
            nResult = ScanItemsBlock( oItem:aItems, bAction )
         endif      
      endif
      n++
   end      

return nResult


La forma de usarlo es así:
Code (fw): Select all Collapse
MsgInfo( oTree:Scan( { | o | cText $ o:cPrompt } ) )


El método Scan( bAction ) evalua bAction con cada uno de los items del árbol hasta que se devuelva un valor distinto de cero.

En realidad se puede usar cualquier codeblock que devuelva distinto de cero. Similar a como funciona la función AScan() de Clipper/Harbour :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Wed Dec 31, 2014 11:51 AM
Esta es una versión mejorada que devuelve el item del TreeView, lo cual nos dá más posibilidades de acción y lo hace más práctico:

Code (fw): Select all Collapse
METHOD Scan( bAction ) CLASS TTreeView

return ScanItemsBlock( ::aItems, bAction )


Code (fw): Select all Collapse
static function ScanItemsBlock( aItems, bAction ) 

   local oItem, n := 1, oItemFound

   while n <= Len( aItems ) .and. oItemFound == nil
      oItem = aItems[ n ]
      if Eval( bAction, oItem )
         return oItem
      else
         if Len( oItem:aItems ) > 0
            oItemFound = ScanItemsBlock( oItem:aItems, bAction )
         endif      
      endif
      n++
   end      

return oItemFound


Este sería el ejemplo de uso:
Code (fw): Select all Collapse
function SearchTextInTree( oTreeView, cText )

   local oItem := oTreeView:Scan( { | o | cText $ o:cPrompt } )
   
   if oItem != nil
      MsgInfo( oItem:cPrompt )
   endif   
   
return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Wed Dec 31, 2014 12:20 PM

Acabo de fijarme que la pregunta era relativa a un árbol montado en un browse, sorry :-)

El método que he publicado es para un control TTreeView :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Fri Jan 02, 2015 01:28 PM
Rao, Aquí el código donde debería implementar una búsqueda por nombre.

Code (fw): Select all Collapse
#include 'fivewin.ch'
#include 'xbrowse.ch'
Static oWnd
Static oTree
Static aCursos
Static aAlumnos
Static aSecciones


//----------------------------------------------------------------------------//
Function Main()

    DefineEntorno()
    BuscaLosAlumnos()
    
    Define Window oWnd MDI
    Activate Window oWnd Maximized On Init TablaAlumnos()
    Return 0

//----------------------------------------------------------------------------//
Function TablaAlumnos()

    Local i
    Local oFont1    
    Local oFont2    
    Local oFont3    
    Local oFont4    
    Local oBrwCargaA
    Local oWndAlumnos
    
    Define Font oFont1 Name "Segoe UI Light" Size 0, -12 Bold
    Define Font oFont2 Name "Segoe UI Light" Size 0, -12 
    Define Font oFont3 Name "Segoe UI"       Size 0, -14 
    Define Font oFont4 Name "Segoe UI"       Size 0, -14 Bold

    Define Window oWndAlumnos MDICHILD Of oWnd No Caption Border None Color 0, CLR_WHITE        
        
        @ 0, 0 xBrowse oBrwCargaA Of oWndAlumnos Size 300, 470 Noborder
    oBrwCargaA : SetTree( oTree, { FWRArrow(), FWDArrow(), "punto3" })
        With Object oBrwCargaA
            For i := 1 To Len( :aCols )
                Switch i
                    Case 1
                        :aCols[ i ] : oDataFont := { || If( oBrwCargaA : oTreeItem : nLevel == 1, oFont4, If( oBrwCargaA : oTreeItem : nLevel == 2, oFont1, oFont2 ) ) }
                        :aCols[ i ] : cHeader   := 'ALUMNOS'
                        Exit
                EndSwitch
                :aCols[ i ] : oHeaderFont := oFont1
            Next i          
            :bClrHeader         := { || { 0, CLR_WHITE  } }
            :nRowHeight       := 27
            :nHeaderHeight    := 35
            :nColDividerStyle := 1
            :nRowDividerStyle := 1
            :nColorPen        := nRgb( 225, 225, 225 )
            :nMarqueeStyle    := 3
            :nRecSelColor     := CLR_WHITE
            :lFlatStyle       := .t.
            :bClrSel          := { || { CLR_BLACK, RGB( 255, 255, 255 ) } }
            :bClrSelFocus     := { || { CLR_WHITE, RGB( 43, 87, 154 ) } }
            :lFlatStyle       := .t.
            :l2007            := .f.
            :lKinetic         := .f.
            :lAllowRowSizing  := .f.
            :lHScroll         := .f.
            :nStretchCol      := STRETCHCOL_LAST
            :lColDividerComplete := .t.
            :CreateFromCode()
        EndWith
        
    Activate Window oWndAlumnos Maximized On Init oBrwCargaA : SetFocus() Valid( oFont1 : End(), oFont2 : End(), oFont3 : End(), oFont4 : End(), .t. )
    Return 0    


//----------------------------------------------------------------------------//
Function DefineEntorno()

    Set Epoch To 1950
    Set Date  To British
    Set Delete   On
    Set Autopen  Off
    Set Softseek On
    Set Century  On
    Set Confirm  On
    Set Decimals To 2
    Set Fixed Off
    Set Exact on
    Set( _SET_INSERT, !Set( _SET_INSERT ) )
    SetGetColorFocus( nRgb( 235, 245, 255 ) )
    Request HB_LANG_ES
    Hb_LangSelect("ES")
    SetHandleCount( 200 )
    Request DBFCDX
    RddSetDefault( "DBFCDX" )
    Request HB_CODEPAGE_ESWIN
    Set( _SET_CODEPAGE, "ESWIN" )
    XbrNumFormat( "E", .t. )
    SetBalloon( .f. )
    SetCenterOnParent( .t. )
    aDatos()
    Return 0

//----------------------------------------------------------------------------//
Static Function BuscaLosAlumnos()

    Local i
    Local q
    Local nFor
    Local aDatos
    
    aCursos    := ASort( aCursos,,, { | x, y | x[ 3 ] < y[ 3 ] } )
    aSecciones := ASort( aSecciones,,, { | x, y | x[ 3 ] < y[ 3 ] } )
    
    Tree oTree
        For i := 1 To Len( aSecciones ) 
            _TreeItem( aSecciones[ i ][ 2 ] ) : Cargo := { aSecciones[ i ][ 1 ] }       
            Tree
                For q := 1 To Len( aCursos )
                    aDatos := {}
                    AEval( aAlumnos, { | x | If( x[ 3 ] == aCursos[ q ][ 1 ] .and. x[ 4 ] == aSecciones[ i ][ 1 ], Aadd( aDatos, { x[ 1 ], x[ 2 ], x[ 3 ], x[ 4 ] } ), ) } )
                    If( !Empty( aDatos ) )
                        _TreeItem( aCursos[ q ][ 2 ] ) : Cargo := { aSecciones[ i ][ 1 ], aCursos[ q ][ 1 ] }                            
                        Tree
                            For nFor := 1 To Len( aDatos )
                                _TreeItem( aDatos[ nFor ][ 2 ] ) : Cargo := { aSecciones[ i ][ 1 ], aCursos[ q ][ 1 ], aDatos[ nFor ][ 1 ] }
                            Next nFor
                        EndTree
                    End
                Next q
            EndTree
        Next i
    Endtree
    oTree : Expand() 
    Return 0    
    
//----------------------------------------------------------------------------//
Function aDatos()

    aCursos := { { 1, "SALA VERDE - PRE JARDIN", 1 },; 
                  { 2, "SALA AMARILLA - 2 AÑOS", 2 },; 
                  { 3, "SALA AZUL - 3 AÑOS", 3 },; 
                  { 4, "SALA ROJA - 4 AÑOS", 4 },; 
                  { 5, "SALA NARANJA - 5 AÑOS", 5 },; 
               { 6, "2 AÑOS 2015", 6 },; 
                 { 7, "3 AÑOS 2015", 7 },; 
                  { 8, "4 AÑOS 2015", 8 },; 
                 { 9, "5 AÑOS 2015", 9 },; 
                  { 10, "PRE JARDIN 2015", 10 },; 
                 { 11, "DEUDORES", 11 } } 
                 
    aSecciones := { { 1, 'MAÑANA', 1 } }
    

    aAlumnos := { { 1, "ABADI EMA OLIVIA", 2, 1 },; 
                      { 2, "ABADI HLADILO MARGARITA", 2, 1 },; 
                      { 3, "ALBORES JUANA", 2, 1 },; 
                      { 4, "ALIJO LUPKIN, PEDRO", 3, 1 },; 
                     { 5, "ALVAREZ CASADO, HELENA", 5, 1 },; 
                      { 6, "ASTORI, CAMILA", 3, 1 },; 
                      { 7, "AUGUSTOWSKI MORENA", 2, 1 },; 
                      { 8, "AUGUSTOWSKI, LUCAS", 5, 1 },; 
                      { 9, "AYALA TORALES, BENJAMIN", 3, 1 },; 
                      { 10, "BARCELO, JOSE", 4, 1 },; 
                      { 11, "BARDAUIL ASTOR", 5, 1 },; 
                     { 12, "BIANCHI SELZER ULISES", 2, 1 },; 
                     { 13, "BIANCHI SELZER, LISA", 4, 1 },; 
                      { 14, "BLANCO LIMERES CHARO", 3, 1 },; 
                     { 15, "BONDA CAMILO", 8, 1 },; 
                     { 16, "BONDA MARGARITA", 8, 1 },; 
                      { 17, "BORZESE JULIA", 6, 1 },; 
                      { 18, "BORZESE, LOLA", 3, 1 },; 
                      { 19, "BUNGE MANUEL", 6, 1 },; 
                     { 20, "BURITICA BRUNO", 3, 1 },; 
                      { 21, "CABRERA PEPER FRANCISCO", 2, 1 },; 
                      { 22, "CALURA CELESTE", 5, 1 },; 
                      { 23, "CALVO TORTI CAMILA", 6, 1 },; 
                      { 24, "CAO SALVADOR", 1, 1 },; 
                      { 25, "CAPRIGLIONE CATALINA", 2, 1 },; 
                      { 26, "CARNOTA, AMANDA", 4, 1 },; 
                     { 27, "CARRIERI, FACUNDO", 5, 1 },; 
                     { 28, "CUADROS SANTINO", 4, 1 },; 
                      { 29, "CUNDARI CARLI LOLA", 3, 1 },; 
                     { 30, "DAICH OLIVIA", 6, 1 },; 
                     { 31, "DEL AMO FARBER, LUCIA", 5, 1 },; 
                      { 32, "DESIMONE PACO", 1, 1 },; 
                      { 33, "DUBOURG, JOAQUIN", 11, 1 },; 
                      { 34, "ESTEVEZ, MILO", 4, 1 },; 
                     { 35, "ETCHEVERRY FELIPE", 5, 1 },; 
                      { 36, "FACCHINI FELIPE", 2, 1 },; 
                      { 37, "FAIG BRUNA", 2, 1 },; 
                      { 38, "FAIG, RENZO", 5, 1 },; 
                      { 39, "FERRAZ VAZQUEZ BRUNO", 6, 1 },; 
                      { 40, "FERRAZ VAZQUEZ VALENTIN", 3, 1 },; 
                      { 41, "FILEVICH IRENE", 1, 1 },; 
                     { 42, "GASCON, VIOLETA", 4, 1 },; 
                     { 43, "GELLON MAXON, MILA", 4, 1 },; 
                      { 44, "GOMEZ FESTA, JAZMIN SOL", 5, 1 },; 
                     { 45, "GOMEZ FESTA, JUAN MARTIN", 3, 1 },; 
                     { 46, "GONZALEZ FERREYRA, AGUSTINA", 5, 1 },; 
                      { 47, "GRIBNICOW MARC", 6, 1 },; 
                      { 48, "GRIBNICOW, LISA", 5, 1 },; 
                      { 49, "HERZOG VERA", 2, 1 },; 
                     { 50, "HITZIG, TANIA", 3, 1 },; 
                      { 51, "HUBERMAN, BENJAMIN", 4, 1 },; 
                      { 52, "HUERTA, CATALINA", 4, 1 },; 
                      { 53, "IANNI ZAHIR NICOLAS", 4, 1 },; 
                      { 54, "ISHII, HANNA", 5, 1 },; 
                      { 55, "ISKIN JOAQUIN", 1, 1 },; 
                      { 56, "JUVE, LAUTARO", 4, 1 },; 
                     { 57, "LAGATTA, FEDERICA", 4, 1 },; 
                     { 58, "LAURITO, ERNESTINA", 5, 1 },; 
                      { 59, "LEMESOFF SANTIAGO", 2, 1 },; 
                     { 60, "LEMESOFF, SOL", 4, 1 },; 
                     { 61, "LISOTTO EMILIA", 3, 1 },; 
                      { 62, "LOPEZ MORETTI MAXIMO", 1, 1 },; 
                      { 63, "MANDARANO MIGUEL", 6, 1 },; 
                      { 64, "MAROTTA ARBISER, VICENTE", 11, 1 },; 
                     { 65, "MAROTTA MOSEINCO, INES", 3, 1 },; 
                      { 66, "MARQUIS, LISA", 2, 1 },; 
                      { 67, "MATEOS SAMPIERI ROCIO", 6, 1 },; 
                      { 68, "MATTIOLI, FRIDA", 4, 1 },; 
                      { 69, "MENDEZ, JULIETA MICAELA", 5, 1 },; 
                      { 70, "MENENDEZ EMILIA", 1, 1 },; 
                      { 71, "MURTA CATALINA", 6, 1 },; 
                     { 72, "NOBILI CLARA", 1, 1 },; 
                     { 73, "NOBLIA, LUCIO", 3, 1 },; 
                      { 74, "PAZ BUNGE LUCIO", 2, 1 },; 
                     { 75, "PAZ BUNGE SERENA", 4, 1 },; 
                     { 76, "PELISCH  LUCIO", 3, 1 },; 
                      { 77, "PICHARDO PAQUETTE, MATEO", 5, 1 },; 
                      { 78, "PISOTTI, OLIVIA ISABEL", 3, 1 },; 
                      { 79, "PONTURA, AMELIA", 11, 1 },; 
                     { 80, "PORTAS MARTINIANO", 7, 1 },; 
                      { 81, "PROSDOCIMI JUAN", 2, 1 },; 
                      { 82, "PROSDOCIMI, MATEO", 5, 1 },; 
                      { 83, "RAVAZZOLA SIGAL, JULIA", 5, 1 },; 
                      { 84, "REBOREDO, LUCAS", 5, 1 },; 
                      { 85, "RESTAINO, LUCAS", 5, 1 },; 
                      { 86, "REY INTI MATEO", 5, 1 },; 
                     { 87, "ROBBIO, TOMAS", 4, 1 },; 
                     { 88, "SAFAR SANTIAGO", 2, 1 },; 
                      { 89, "SAFARIAN DANTE JOSE", 4, 1 },; 
                     { 90, "SAFARIAN INES ESTHER", 4, 1 },; 
                     { 91, "SANTAMARINA LUCIO", 2, 1 },; 
                      { 92, "SASSON TULIO", 2, 1 },; 
                      { 93, "SCALA CARMELA", 4, 1 },; 
                      { 94, "SCALA FRANCO", 7, 1 },; 
                     { 95, "SCHUFER, IARA", 4, 1 },; 
                      { 96, "SIRI, MAXIMO", 11, 1 },; 
                      { 97, "SUAREZ RODRIGUEZ CATALINA", 2, 1 },; 
                      { 98, "TAGLIAFICO, BARBIERI SIMON", 3, 1 },; 
                      { 99, "TAMARIT ISABELLA", 3, 1 },; 
                      { 100, "TCHIRA RAFAEL", 6, 1 },; 
                      { 101, "TORRELLA CASARES FIDEL", 3, 1 },; 
                     { 102, "TSARIKTSIAN CLARA", 6, 1 },; 
                     { 103, "TSARIKTSIAN, FRANCO AGOP", 3, 1 },; 
                      { 104, "URBANCIC PAOLINI CIRO", 1, 1 },; 
                     { 105, "VAZQUEZ PETERS, LARA", 5, 1 },; 
                     { 106, "VAZQUEZ, GUADALUPE LUCIA", 3, 1 },; 
                      { 107, "VILLA GARCIA LLOSA AGUSTINA", 4, 1 },; 
                      { 108, "WEINTRAUB JULIETA", 4, 1 },; 
                      { 109, "WICHTER CAMILO", 4, 1 },; 
                     { 110, "WIRTH, PEDRO", 4, 1 },; 
                      { 111, "WOLKOWICZ, TEO", 4, 1 },; 
                      { 112, "YOHAI OLIVER", 4, 1 },; 
                      { 113, "YOHAI SARA LUCIA", 3, 1 },; 
                      { 114, "ZAHIR THOMAS", 6, 1 },; 
                      { 115, "ZUBIRI MAYRA SOL", 4, 1 },; 
                      { 117, "DELLACASA ANDRES", 1, 2 } }   
    Return 0


Gracias por su atención

Saludos
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Sat Jan 03, 2015 04:36 PM
I modify these lines in your program
Code (fw): Select all Collapse
    Define Window oWndAlumnos MDICHILD Of oWnd No Caption Border None Color 0, CLR_WHITE        
        
        @ 0, 0 xBrowse oBrwCargaA Of oWndAlumnos Size 300, 470 Noborder

like this:
Code (fw): Select all Collapse
    Define Window oWndAlumnos MDICHILD Of oWnd No Caption Border None Color 0, CLR_WHITE
    DEFINE BUTTONBAR oWndAlumnos:oBar SIZE 100,32 2007
    DEFINE BUTTON OF oWndAlumnos:oBar PROMPT "Find" ACTION FindInTree( oBrwCargaA )
    SET MESSAGE OF oWndAlumnos TO "" 2007

        @ oWndAlumnos:oBar:nHeight, 0 xBrowse oBrwCargaA Of oWndAlumnos Size 300, -oWndAlumnos:oMsgBar:nHeight PIXEL Noborder


At the end of the program I added this function
Code (fw): Select all Collapse
function FindInTree( oBrw )

   local cFind    := Space( 20 )
   local oFound

   if ! MsgGet( "Enter Search", "FIND", @cFind ) .or. Empty( cFind )
      return nil
   endif

   cFind    := Upper( AllTrim( cFind ) )

   oFound   := oBrw:oTree:Find( { |o| cFind $ o:cPrompt }, .t. )
   if oFound == nil
      ? "Not Found"
   else
      oBrw:oTreeItem    := oFound
      oBrw:nRowSel      := 50
      oBrw:Refresh()

   endif

return nil

Please try clicking on the button "Find" in the buttonbar
Regards



G. N. Rao.

Hyderabad, India
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Búsqueda en un tree montado en un xBrowse
Posted: Sat Jan 03, 2015 05:03 PM

Thank you very much Rao, worked perfect.

regards

Continue the discussion