DBCOMBO Metodos GotFocus() y LostFocus()

DBCOMBO Metodos GotFocus() y LostFocus()

Postby mterraz » Mon Jan 09, 2017 3: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
mterraz
 
Posts: 48
Joined: Mon Jun 10, 2013 1:21 pm

Re: DBCOMBO Metodos GotFocus() y LostFocus()

Postby Antonio Linares » Tue Jan 10, 2017 10:45 am

Mariano,

Modifica así el método LostFocus() de la Clase TDbCombo:
Code: Select all  Expand view
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
User avatar
Antonio Linares
Site Admin
 
Posts: 41274
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: DBCOMBO Metodos GotFocus() y LostFocus()

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41274
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: DBCOMBO Metodos GotFocus() y LostFocus()

Postby Antonio Linares » Tue Jan 10, 2017 11:25 am

Para poder usar bKeyChar tienes que realizar estos cambios en la Clase TDbCombo:

Code: Select all  Expand view

METHOD KeyChar( nKey, nFlags) CLASS TDBCombo

...

   // ::Super: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41274
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: DBCOMBO Metodos GotFocus() y LostFocus()

Postby mterraz » Tue Jan 10, 2017 4:08 pm

Excelente Antonio! muchas gracias por la pronta ayuda, todo funcionando!
Saludos, Mariano
mterraz
 
Posts: 48
Joined: Mon Jun 10, 2013 1:21 pm


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 11 guests