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,

Image

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