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?
José Murugosa
"Los errores en programación, siempre están entre la silla, el teclado y la IA!!"
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?
You can use 3rd parameter bInit to configure your browse.
Please see the source in tget.prg
Thank you very much Mr. Rao!!
jose_murugosa wrote:Thank you very much Mr. Rao!!
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 nilfunction 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 nilaHeaders := { "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 ) PixelNo 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, 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...
Haber si Mr.RAO nos ayuda en esto... ![]()
#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
//----------------------------------------------------------------------------//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... ![]()
Maestro,
Mil disculpas, tiene Ud. razón ![]()
La verdad erré y no fue a un caballo ![]()
#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
//----------------------------------------------------------------------------//Buenaso ![]()
Muy prolijo, no sabía que se podía escribir de ese modo en un codeblock.
Gracias Maestro!
cnavarro wrote:A mi me gusta mas hacerlo asi
#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 //----------------------------------------------------------------------------//
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