FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour DBCOMBO Metodos GotFocus() y LostFocus()
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
DBCOMBO Metodos GotFocus() y LostFocus()
Posted: Mon Jan 09, 2017 03:41 PM

Estimados Colegas,
Estoy teniendo un inconveniente con la clase DBCOMBO y sus metodos gotfocus() y lostfocus().
En ningún caso se realiza la acción esperada.

Ejemplo propuesto:

REDEFINE DBCOMBO oComb[5] VAR cCampo ;
ITEMS aItems ;
LIST alist ;
ID 4053 OF oFil UPDATE WHEN lContenida

oComb[5]:blostfocus := { || AgregaContenido() }

Function AgregaContenido()
Alert("PIERDE FOCO")
retu .t.

El objetivo es que cuando el DBCOMBO pierda el foco o bien se seleccione un item, ejecute cierta función por ejemplo yo estoy tratando de ejecutar AgregaContenido() pero sin ningún resultado, simplemente no se ejecuta.
También me seria de utilidad algún ejemplo de como utilizar los eventos bkeychar para esta misma clase.. necesito capturar cuando se presiona VK_ENTER o se selecciona un item con el mouse...

Teniendo en cuenta información que encontré en este foro realice la siguiente modificación en la clase DBCOMBO para el método LostFocus() pero sin resultados positivos.

METHOD LostFocus() CLASS TDBCombo

local nAt := ::SendMsg( CB_GETCURSEL )

if nAt != CB_ERR
::nAt = nAt + 1
Eval( ::bSetGet, ::aItems[ ::nAt ] )
else
Eval( ::bSetGet, GetWindowText( ::hWnd ) )
endif

//aqui se evalua el blostfocus
if ! Empty( ::bLostFocus )
return Eval( ::bLostFocus, Self, ::hWnd )
endif
//fin modificacion

::cSearchKey:=""

return nil

Quedo atento a cualquier comentario,ayuda o modificación que me permita utilizar de forma correcta los DBCOMBOS

Saludos cordiales Mariano

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: DBCOMBO Metodos GotFocus() y LostFocus()
Posted: Tue Jan 10, 2017 10:45 AM
Mariano,

Modifica así el método LostFocus() de la Clase TDbCombo:
Code (fw): Select all Collapse
METHOD LostFocus( hWndGetFocus ) CLASS TDBCombo

   local nAt := ::SendMsg( CB_GETCURSEL )

   if nAt != CB_ERR
      ::nAt = nAt + 1
      Eval( ::bSetGet, ::aItems[ ::nAt ] )
   else
      Eval( ::bSetGet, ::GetText() )
   endif

   ::cSearchKey = ""

return ::Super:LostFocus( hWndGetFocus )


Ahora en el ejemplo samples\testdbc1.prg añade esta línea:

oDBC1:bGotFocus = { || MsgBeep() }

y verás como suena al recibir el foco
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: DBCOMBO Metodos GotFocus() y LostFocus()
Posted: Tue Jan 10, 2017 10:56 AM

Asi puedes saber cuando se selecciona un ítem con el ratón:

oDBC1:bChange = { | oDbc, cItem | MsgInfo( cItem ) }

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: DBCOMBO Metodos GotFocus() y LostFocus()
Posted: Tue Jan 10, 2017 11:25 AM
Para poder usar bKeyChar tienes que realizar estos cambios en la Clase TDbCombo:

Code (fw): Select all Collapse
METHOD KeyChar( nKey, nFlags) CLASS TDBCombo

...

   // ::KeyChar(nKey, nFlags)

   if ! Empty( ::bKeyChar )
      Eval( ::bKeyChar, nKey )
   endif   

RETURN 0


y puedes usarlo así:

oDBC1:bKeyChar = { | nKey | MsgInfo( nKey ) }
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Re: DBCOMBO Metodos GotFocus() y LostFocus()
Posted: Tue Jan 10, 2017 04:08 PM

Excelente Antonio! muchas gracias por la pronta ayuda, todo funcionando!
Saludos, Mariano

Continue the discussion