Page 1 of 1
Combobox y búsqueda incremental
Posted: Wed Nov 08, 2017 1:46 pm
by horacio
Colegas, tengo definido un combobox con estilo CBS_DROPDOWN y búsqueda incremetal. Cuando recorro los items se ejecuta una acción pero cuando hago la búsqueda la acción no se ejecuta. Este es el código.
Code: Select all | Expand
#include "fivewin.ch"
Static aItems
//----------------------------------------------------------------------------//
Function Main()
Local oDlg
Local oCbx
Local cVar
aItems := { 'UNO', 'DOS', 'TRES' }
Define Dialog oDlg Truepixel
@ 10, 10 ComboBox oCbx Var cVar Size 100, 150 Items aItems Of oDlg Pixel On Change( Muestrame( oCbx ) ) Style CBS_DROPDOWN
oCbx : lIncSearch := .t.
Activate Dialog oDlg
Return 0
//----------------------------------------------------------------------------//
Function Muestrame( oCbx )
? aItems[ oCbx : nAt ]
Return 0
Alguna idea ??? Muchas gracias
Saludos
Re: Combobox y búsqueda incremental
Posted: Wed Nov 08, 2017 2:51 pm
by karinha
Re: Combobox y búsqueda incremental
Posted: Wed Nov 08, 2017 3:17 pm
by horacio
Gracias Joao por responder, la búsqueda funciona, lo que no funciona es el bChange que no se ejecuta cuando hago la búsqueda, sí cuando recorro los items con el teclado o ratón. Compila el ejemplo que postee y prueba.
Saludos
Re: Combobox y búsqueda incremental
Posted: Wed Nov 08, 2017 5:29 pm
by karinha
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg, oCbx, cSearch := Space( 100 ), ;
aItems := { "africa", "america", "asia", "europe", "oceania" }
DEFINE DIALOG oDlg SIZE 400, 300
@ 2.4, 1.2 COMBOBOX oCbx VAR cSearch ITEMS aItems OF oDlg SIZE 180, 150
oCbx:lIncSearch = .T.
ACTIVATE DIALOG oDlg CENTERED
return nil
Re: Combobox y búsqueda incremental
Posted: Wed Nov 08, 2017 5:31 pm
by karinha
Code: Select all | Expand
#include "fivewin.ch"
Static aItems
//----------------------------------------------------------------------------//
Function Main()
Local oDlg
Local oCbx
Local cVar
aItems := { 'UNO', 'DOS', 'TRES' }
//Define Dialog oDlg Truepixel
DEFINE DIALOG oDlg FROM 10, 10 TO 20, 50 ;
TITLE "DropDown ComboBox Test" TRUEPIXEL
@ 10, 10 ComboBox oCbx Var cVar Size 100, 150 Items aItems Of oDlg Pixel ;
On Change( Muestrame( oCbx, oDlg ) ) Style CBS_DROPDOWN
oCbx : lIncSearch := .t.
Activate Dialog oDlg
Return Nil
//----------------------------------------------------------------------------//
Function Muestrame( oCbx, oDlg )
LOCAL cText
// ? aItems[ oCbx : nAt ]
cText := aItems[ oCbx:nAt ]
oDlg:SetText( cText )
Return( .T. )
Re: Combobox y búsqueda incremental
Posted: Wed Nov 08, 2017 5:35 pm
by horacio
Joao, con tu código tampoco funciona. Ingresa la letra "U", aparecerá "UNO" en el get del combobox pero no se ejecuta muestrame( oCbx, oDlg )
Saludos
Re: Combobox y búsqueda incremental
Posted: Wed Nov 08, 2017 8:01 pm
by karinha
Horácio, cambia asi:
Code: Select all | Expand
@ 10, 10 ComboBox oCbx Var cVar Size 100, 150 Items aItems Of oDlg Pixel ;
On Change( Muestrame( oCbx, oDlg ) ) Style CBS_DROPDOWN UPDATE
Acá funciona bién.
Saludos.
Re: Combobox y búsqueda incremental
Posted: Wed Nov 08, 2017 8:28 pm
by horacio
Joao, he seguido tu sugerencia pero no logro hacerlo funcionar. Será la versión de FWH que utilizo ? Uso FWH 17.01. Gracias de todas maneras
Saludos
Re: Combobox y búsqueda incremental
Posted: Thu Nov 09, 2017 11:52 am
by karinha
Horácio cuando pulso el mouse, el on change funciona bién,

Code: Select all | Expand
#include "fivewin.ch"
Static aItems
//----------------------------------------------------------------------------//
Function Main()
Local oDlg
Local oCbx
Local cVar
aItems := { 'UNO', 'DOS', 'TRES' }
//Define Dialog oDlg Truepixel
DEFINE DIALOG oDlg FROM 10, 10 TO 20, 50 ;
TITLE "DropDown ComboBox Test" TRUEPIXEL
@ 10, 10 ComboBox oCbx Var cVar Size 100, 150 Items aItems Of oDlg Pixel ;
On Change( Muestrame( oCbx, oDlg ) ) Style CBS_DROPDOWN UPDATE
oCbx : lIncSearch := .t.
Activate Dialog oDlg Center
Return Nil
//----------------------------------------------------------------------------//
Function Muestrame( oCbx, oDlg )
LOCAL cText
? aItems[ oCbx : nAt ]
//cText := aItems[ oCbx:nAt ]
//oDlg:SetText( cText )
oDlg:Refresh()
Return( .T. )
Saludos.
Re: Combobox y búsqueda incremental
Posted: Thu Nov 09, 2017 11:58 am
by horacio
bChange trabaja si recorres los items con el mouse o con el teclado pero no funciona si lo haces con la búsqueda incremental, en ese caso bChange no se ejecuta. Fijate que si pulsas la "U" en el get del combobox aparecerá "UNO" pero el msgbox no se ejecuta. Confirmame si lo que digo es cierto. Gracias
Saludos
Re: Combobox y búsqueda incremental
Posted: Thu Nov 09, 2017 1:28 pm
by karinha
Horacio, mira se asi ayuda:
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg, oCbx, cDia
// DEFINE DIALOG oDlg
DEFINE DIALOG oDlg FROM 10, 10 TO 20, 50 ;
TITLE "DropDown ComboBox Test"
@ 1, 4 SAY "Digite dia y use <Enter> " OF oDlg SIZE 100, 10
@ 2, 3 COMBOBOX oCbx VAR cDia OF oDlg SIZE 100, 300 ;
ITEMS { "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" } ;
STYLE CBS_DROPDOWN ON CHANGE QueDia( cDia )
/* ;
VALID( QueDia( cDia ) ) */
oCbx:oGet:bKeyChar = { | nKey | If( nKey == VK_RETURN,;
( cDia := oCbx:oGet:GetText(), ;
Eval( oCbx:bChange() ) ),), ;
oCbx:GetKeyChar( nKey ) }
oCbx:lIncSearch := .T.
ACTIVATE DIALOG oDlg CENTERED
return nil
function QueDia(cDia)
MsgAlert("Hoy día es: "+cDia)
Return( .T. )
Re: Combobox y búsqueda incremental
Posted: Thu Nov 09, 2017 2:10 pm
by horacio
Muchas gracias Joao por tu tiempo. En tu ejemplo una vez hecha la búsqueda incremental tengo que digitar una tecla ( VK_RETURN ) para que se ejecute el bChange, sin dudas sería una posible solución pero el comportamiento correcto sería que una vez que ingrese, por ejemplo el caracter "L" me aparezca "Lunes" y se ejecute el bChange cosa que no sucede. Veré como me resulta tu solución para mi proyecto. Nuevamente muchas gracias.
Saludos