Page 1 of 2

PopupBrowse con búsqueda

PostPosted: Fri Jun 09, 2017 6:41 pm
by jose_murugosa
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?

Re: PopupBrowse con búsqueda

PostPosted: Fri Jun 09, 2017 9:34 pm
by nageswaragunupudi
You can use 3rd parameter bInit to configure your browse.
Please see the source in tget.prg

Re: PopupBrowse con búsqueda

PostPosted: Mon Jun 12, 2017 11:28 pm
by jose_murugosa
Thank you very much Mr. Rao!!

Re: PopupBrowse con búsqueda

PostPosted: Wed Jun 21, 2017 3:54 am
by joseluisysturiz
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... :shock:

Re: PopupBrowse con búsqueda

PostPosted: Wed Jun 21, 2017 1:05 pm
by jose_murugosa
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: Select all  Expand view

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: Select all  Expand view

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.

Re: PopupBrowse con búsqueda

PostPosted: Wed Jun 21, 2017 1:32 pm
by cnavarro
Jose

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

Code: Select all  Expand view


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

 

Re: PopupBrowse con búsqueda

PostPosted: Wed Jun 21, 2017 3:48 pm
by jose_murugosa
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.

Re: PopupBrowse con búsqueda

PostPosted: Thu Jun 22, 2017 2:31 am
by joseluisysturiz
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:

Re: PopupBrowse con búsqueda

PostPosted: Thu Jun 22, 2017 3:55 am
by cnavarro
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: Select all  Expand view


#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

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

 

Re: PopupBrowse con búsqueda

PostPosted: Thu Jun 22, 2017 5:03 am
by joseluisysturiz
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:

Re: PopupBrowse con búsqueda

PostPosted: Thu Jun 22, 2017 9:38 am
by jose_murugosa
Maestro,
Mil disculpas, tiene Ud. razón :)

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

Re: PopupBrowse con búsqueda

PostPosted: Thu Jun 22, 2017 12:09 pm
by cnavarro
A mi me gusta mas hacerlo asi
Code: Select all  Expand view


#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

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

 

Re: PopupBrowse con búsqueda

PostPosted: Thu Jun 22, 2017 1:44 pm
by jose_murugosa
Buenaso :)
Muy prolijo, no sabía que se podía escribir de ese modo en un codeblock.
Gracias Maestro!

Re: PopupBrowse con búsqueda

PostPosted: Thu Jun 22, 2017 4:55 pm
by joseluisysturiz
cnavarro wrote:A mi me gusta mas hacerlo asi
Code: Select all  Expand view


#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... :shock:

Re: PopupBrowse con búsqueda

PostPosted: Thu Jun 22, 2017 5:00 pm
by cnavarro
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