PopupBrowse con búsqueda

User avatar
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

PopupBrowse con búsqueda

Post 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?
Last edited by jose_murugosa on Mon Jun 12, 2017 11:29 pm, edited 1 time in total.
Saludos/Regards,
José Murugosa
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
nageswaragunupudi
Posts: 10721
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 8 times
Contact:

Re: PopupBrowse con búsqueda

Post by nageswaragunupudi »

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

G. N. Rao.
Hyderabad, India
User avatar
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Re: PopupBrowse con búsqueda

Post by jose_murugosa »

Thank you very much Mr. Rao!!
Saludos/Regards,
José Murugosa
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
joseluisysturiz
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: PopupBrowse con búsqueda

Post 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:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Re: PopupBrowse con búsqueda

Post 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


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


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 y el teclado y la IA!!"
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: PopupBrowse con búsqueda

Post 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



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
User avatar
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Re: PopupBrowse con búsqueda

Post 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.
Saludos/Regards,
José Murugosa
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
joseluisysturiz
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: PopupBrowse con búsqueda

Post 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:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: PopupBrowse con búsqueda

Post 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



#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
User avatar
joseluisysturiz
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: PopupBrowse con búsqueda

Post 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:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Re: PopupBrowse con búsqueda

Post by jose_murugosa »

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 y el teclado y la IA!!"
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: PopupBrowse con búsqueda

Post by cnavarro »

A mi me gusta mas hacerlo asi

Code: Select all | Expand



#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
User avatar
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Re: PopupBrowse con búsqueda

Post by jose_murugosa »

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 y el teclado y la IA!!"
User avatar
joseluisysturiz
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: PopupBrowse con búsqueda

Post by joseluisysturiz »

cnavarro wrote:A mi me gusta mas hacerlo asi

Code: Select all | Expand



#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:
Last edited by joseluisysturiz on Thu Jun 22, 2017 5:08 pm, edited 1 time in total.
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: PopupBrowse con búsqueda

Post 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
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
Post Reply