FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour PopupBrowse con búsqueda
Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM
PopupBrowse con búsqueda
Posted: Fri Jun 09, 2017 06:41 PM

Me gusta mucho esta función, sería posible añadirle una búsqueda para facilitar acceder a un item en una tabla con muchos?

Saludos/Regards,

José Murugosa

"Los errores en programación, siempre están entre la silla, el teclado y la IA!!"
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: PopupBrowse con búsqueda
Posted: Fri Jun 09, 2017 09:34 PM

You can use 3rd parameter bInit to configure your browse.
Please see the source in tget.prg

Regards



G. N. Rao.

Hyderabad, India
Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Re: PopupBrowse con búsqueda
Posted: Mon Jun 12, 2017 11:28 PM

Thank you very much Mr. Rao!!

Saludos/Regards,

José Murugosa

"Los errores en programación, siempre están entre la silla, el teclado y la IA!!"
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: PopupBrowse con búsqueda
Posted: Wed Jun 21, 2017 03:54 AM
jose_murugosa wrote:Thank you very much Mr. Rao!!


Saludos Jose, hicistes algo sobre este tema que preguntas.? si es asi podrias colocar como lo hicistes.? gracias... :-)
Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Re: PopupBrowse con búsqueda
Posted: Wed Jun 21, 2017 01:05 PM
Tu mensaje me motivó a ponerme en campaña para hacer los ajustes.. :-)

Los headers no pueden ponerse sin modificar popupbrowse en tget, dado que el browse es un objeto de la función.

Yo lo hice así:

Modifiqué popupbrowse en tget de este modo

Code (fw): Select all Collapse
function PopupBrowse( aValue, oGet, bInit, nColumn, aHeaders )    //agregue aHeaders
   //
   local oDlg, oBrw
   local bGetValid, uOrgl
   local aPoint := { oGet:nTop + oGet:nHeight, oGet:nLeft }
   local n                 //agregue la variable n

      .......codigo popupbrowse.....

      oBrw:AutoFit()
      oBrw:lFastDraw := .t.
     
        //codigo modificado
     IF aHeaders != nil
        FOR n = 1 to Len( aHeaders )
            oBrw:aCols[n]:cHeader:= aHeaders[n]
        NEXT n
    ENDIF
       //fin codigo modificado

      .......codigo popupbrowse.....    

return nil


Y lo usé así:

Code (fw): Select all Collapse
function maindialog()
    local oDlg, oGet, cVar, aItems, aHeaders

    aItems:={ {"Vaca", "Va", "Hereford", 2}, ;
              {"Novillo", "Nov", "Angus", 2}, ;
              {"Vaquillona", "Vaq", "Holando", 2}, ;
              {"Toro", "To", "Cruza", 2}  }
            
    aHeaders:=  { "Categoria", "Abrevia", "Raza", "Dato" }   //headers del browse

    DEFINE DIALOG oDlg FROM 0,0 to 40, 70

        @ 50, 50 GET oGet VAR cVar SIZE 200, 22 OF oDlg ACTION PopupBrowse( aItems, oGet, { || ASort( aItems, , , {|x,y| x[2] < y[2] } ) }, 3, aHeaders ) Pixel
        oGet:bKeyDown := { | nKey | If( nKey == VK_F4, PopupBrowse( aItems, oGet, { || ASort( aItems, , , {|x,y| x[2] < y[2] } ) }, 3 ), aHeaders ) }
        
    ACTIVATE DIALOG oDlg Center
    
return nil


Espero que te sea útil.
No incluí el código de popupbrowse por razones obvias. Un abrazo

Quizá si a Antonio le parece bién la implementación de los headers se podría incluir algo así para próximas versiones.
Saludos/Regards,

José Murugosa

"Los errores en programación, siempre están entre la silla, el teclado y la IA!!"
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: PopupBrowse con búsqueda
Posted: Wed Jun 21, 2017 01:32 PM
Jose

Quizás no necesites modificar nada.
Algo asi, no lo he probado. Prueba a utilizar el parámetro bInit

Code (fw): Select all Collapse
aHeaders :=  { "Categoria", "Abrevia", "Raza", "Dato" }   //headers del browse
bInit        := { | o | o:aHeaders := aHeaders, ASort( aItems, , , {|x,y| x[2] < y[2] } ) }
    DEFINE DIALOG oDlg FROM 0,0 to 40, 70

        @ 50, 50 GET oGet VAR cVar SIZE 200, 22 OF oDlg ACTION PopupBrowse( aItems, oGet, bInit, 3 ) Pixel
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: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Re: PopupBrowse con búsqueda
Posted: Wed Jun 21, 2017 03:48 PM

No funciona, porque al momento de ejecutarse binit aún no existe el browse en popupbrowse(), por eso o bien hay que poner el binit despues, pero eso podría afectar otros usos de binit, o hacer una modificación a popupbrowse similar a la propuesta.

Saludos/Regards,

José Murugosa

"Los errores en programación, siempre están entre la silla, el teclado y la IA!!"
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: PopupBrowse con búsqueda
Posted: Thu Jun 22, 2017 02:31 AM

Saludos, Navarro creo lo que dice Murugosa tiene logica, probe como dices y da el error que no existe el objeto oBrw:aHeaders.

Tambien ademas de los titulos de los header, seria bueno "coquetear" el oBrw, segun respuuesta de RAO se deberia poder cambiar configuracion del oBrw, "You can use 3rd parameter bInit to configure your browse. Please see the source in tget.prg", pero por lo visto directamente en la clase GET y no soy de los que se tocar "clases".

Sera qe sequire esperando haber si aplican esos cambios en el popupbrowse, seria bueno a parte de ordenar, tambien usar lSeek ya que uso un xbrow que es un inventario de productos y otro de proveedores y asi el cliente podria hacer busqueda por nombre o algun otro campo...gracias, saludos... :shock:

Haber si Mr.RAO nos ayuda en esto... :shock:

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: PopupBrowse con búsqueda
Posted: Thu Jun 22, 2017 03:55 AM
No, el problema es hacer las cosas sin probarlas ( "de cabeza" ), no existe aHeaders del browse, es cHeader de cada columna
El binit está situado bien en la funcion
Probar esto
Code (fw): Select all Collapse
#include "Fivewin.ch"

function main()
    local oDlg, oGet, cVar, aItems, aHeaders, bInit

    aItems:={ {"Vaca", "Va", "Hereford", 2}, ;
              {"Novillo", "Nov", "Angus", 2}, ;
              {"Vaquillona", "Vaq", "Holando", 2}, ;
              {"Toro", "To", "Cruza", 2}  }
            
    aHeaders :=  { "Categoria", "Abrevia", "Raza", "Dato" }   //headers del browse
    bInit    := { | o | MyInit(  o, aHeaders ), ASort( aItems, , , {|x,y| x[2] < y[2] } ) }
    DEFINE DIALOG oDlg FROM 0,0 to 40, 70

        @ 50, 50 GET oGet VAR cVar SIZE 200, 22 OF oDlg ;
           ACTION PopupBrowse( aItems, oGet, bInit, 3 ) Pixel 
          
           //ACTION PopupBrowse( aItems, oGet, { || ASort( aItemso, , , {|x,y| x[2] < y[2] } ) }, 3, aHeaders ) Pixel
  //  oGet:bKeyDown := { | nKey | If( nKey == VK_F4, PopupBrowse( aItems, oGet, { || ASort( aItems, , , {|x,y| x[2] < y[2] } ) }, 3 ), aHeaders ) }
        
    ACTIVATE DIALOG oDlg Center
    
return nil

//----------------------------------------------------------------------------//

Function MyInit( oBrw, aHeaders )

    local bInit
    local n

    For n = 1 to Len( oBrw:aCols )
       oBrw:aCols[ n ]:cHeader  := aHeaders[ n ]
    Next n

Return nil

//----------------------------------------------------------------------------//
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: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: PopupBrowse con búsqueda
Posted: Thu Jun 22, 2017 05:03 AM

Navarro, de verdad disculpa por no revisar los detalles del codigo primero que enviastes, este nuevo codigo, probado y...TRABAJA PERFECTAMENTE, sabia tenias la idea, me extraño que no funcionara la primera ves, pero bueno, ahora si esta como quiero con los HEADER, ire probando hacer otros cambios en el oBrw haber como queda, de nuevo, gracias y a Murugosa por el tema original, saludos... :shock:

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Re: PopupBrowse con búsqueda
Posted: Thu Jun 22, 2017 09:38 AM

Maestro,
Mil disculpas, tiene Ud. razón :)

La verdad erré y no fue a un caballo :)

Saludos/Regards,

José Murugosa

"Los errores en programación, siempre están entre la silla, el teclado y la IA!!"
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: PopupBrowse con búsqueda
Posted: Thu Jun 22, 2017 12:09 PM
A mi me gusta mas hacerlo asi
Code (fw): Select all Collapse
#include "Fivewin.ch"

function main()

    local oDlg
    local oGet
    local cVar
    local aItems
    local aHeaders
    local bInit

    aItems:={ {"Vaca", "Va", "Hereford", 2}, ;
              {"Novillo", "Nov", "Angus", 2}, ;
              {"Vaquillona", "Vaq", "Holando", 2}, ;
              {"Toro", "To", "Cruza", 2}  }
            
    aHeaders :=  { "Categoria", "Abrevia", "Raza", "Dato" }   //headers del browse
    bInit    := < | oBrw |
                   local n
                   
                   For n = 1 to Len( oBrw:aCols )
                      oBrw:aCols[ n ]:cHeader  := aHeaders[ n ]
                   Next n

                   ASort( aItems, , , {|x,y| x[2] < y[2] } )
         
                   Return nil
               >

    DEFINE DIALOG oDlg FROM 0,0 to 40, 70

        @ 50, 50 GET oGet VAR cVar SIZE 200, 22 OF oDlg ;
           ACTION PopupBrowse( aItems, oGet, bInit, 3 ) Pixel           

    
    ACTIVATE DIALOG oDlg Center
    
return nil

//----------------------------------------------------------------------------//
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: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Re: PopupBrowse con búsqueda
Posted: Thu Jun 22, 2017 01:44 PM

Buenaso :)
Muy prolijo, no sabía que se podía escribir de ese modo en un codeblock.
Gracias Maestro!

Saludos/Regards,

José Murugosa

"Los errores en programación, siempre están entre la silla, el teclado y la IA!!"
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: PopupBrowse con búsqueda
Posted: Thu Jun 22, 2017 04:55 PM
cnavarro wrote:A mi me gusta mas hacerlo asi
Code (fw): Select all Collapse
#include "Fivewin.ch"

function main()

    local oDlg
    local oGet
    local cVar
    local aItems
    local aHeaders
    local bInit

    aItems:={ {"Vaca", "Va", "Hereford", 2}, ;
              {"Novillo", "Nov", "Angus", 2}, ;
              {"Vaquillona", "Vaq", "Holando", 2}, ;
              {"Toro", "To", "Cruza", 2}  }
            
    aHeaders :=  { "Categoria", "Abrevia", "Raza", "Dato" }   //headers del browse
    bInit    := < | oBrw |
                   local n
                   
                   For n = 1 to Len( oBrw:aCols )
                      oBrw:aCols[ n ]:cHeader  := aHeaders[ n ]
                   Next n

                   ASort( aItems, , , {|x,y| x[2] < y[2] } )
         
                   Return nil
               >

    DEFINE DIALOG oDlg FROM 0,0 to 40, 70

        @ 50, 50 GET oGet VAR cVar SIZE 200, 22 OF oDlg ;
           ACTION PopupBrowse( aItems, oGet, bInit, 3 ) Pixel           

    
    ACTIVATE DIALOG oDlg Center
    
return nil

//----------------------------------------------------------------------------//


Navarro, asi como propones es bueno si solo se quiere colocar nombre a los HEARDER, pero llamando una funcion como me dijistes probara anteriormente sirve mas ya que se le pueden hacer mas cambios al oBrw, ya lo estoy personalizando, lo que veo que esta pasando es que siempre aparece al lado derecho una columna adicional, por lo menos visualmente, tengo 2 columnas, CODIGO y NOMBRE PRODUCTOS, le coloque tamaño a cada columna, pero aun el oBrw se ve como si existieran 3 columnas, es como si visualmente sumara una consulta o no se si sera normal y obligatorio que aparezca asi, ya que cuando se hace click sobre esa columna fantasma..no seleccionada el registro como en las otras 2 columnas...espero algun comentario haber si se puede evitar ese detalle visual, gracias...saludos... :-)
Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: PopupBrowse con búsqueda
Posted: Thu Jun 22, 2017 05:00 PM

Jose Luis, eso es cuando el codeblock tiene pocas instrucciones evidentemente, si no, es mejor solución crear una function tal y como lo implementé en primer lugar
Voy a ver lo que comentas, porque con las prisas no me he fijado mucho
Pero, seguro que hay mejores soluciones para incluir en el bInit y configurarlo mejor

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