cual control tuvo el foco

cual control tuvo el foco

Postby Francisco Horta » Wed Aug 10, 2011 10:14 pm

Hola foro,
tengo un dialogo con 30 controles de todo tipo, y tengo un boton que abre un dialogo extra, cuando salga de ese boton quiero que el foco quede en el control que estaba hasta antes dar click al boton, como se cual era ese control?
salu2
pak-o
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: cual control tuvo el foco

Postby FranciscoA » Thu Aug 11, 2011 1:04 pm

Hola, mira si este post te resuelve.
viewtopic.php?f=6&t=2745&start=0&hilit=que+control+tiene+el+foco

También puedes probar con:
nFocus = AScan( oDlg:aControls, { | o | o:lFocused } )

Saludos
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2111
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: cual control tuvo el foco

Postby Francisco Horta » Thu Aug 11, 2011 6:32 pm

francisco, ya habia probado el oDlg:aControls y me da el foco en el control actual no el anterior, probe con el ejemplo del link que me pones, probe de 2 formas diferentes y con ninguna me funciono, hice esto:

REDEFINE BUTTONBMP aoBtn[3] ID 402 OF oDls BITMAP "MONITOS" TEXTRIGHT ;
ACTION SetFocus(aoBtn[3]:cargo) ;
WHEN VAL(nPax) > 1 UPDATE
aoBtn[3]:bGotFocus := {|oBtn,oCtlOld| oBtn:cargo:=oCtlOld,;
Ocupantes(@cNom2,@cPat2,@cMat2,;
@cNom3,@cPat3,@cMat3,;
@cNom4,@cPat4,@cMat4,VAL(nPax)) }

REDEFINE BUTTONBMP aoBtn[3] ID 402 OF oDls BITMAP "MONITOS" TEXTRIGHT ;
ACTION ( Ocupantes(@cNom2,@cPat2,@cMat2,;
@cNom3,@cPat3,@cMat3,;
@cNom4,@cPat4,@cMat4,VAL(nPax)),;
SetFocus( aoBtn[3]:cargo )) ;
WHEN VAL(nPax) > 1 UPDATE
aoBtn[3]:bGotFocus := {|oBtn,oCtlOld| oBtn:cargo := oCtlOld }

alguna otra sugerencia?
gracias
pak-o
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: cual control tuvo el foco

Postby Francisco Horta » Thu Aug 11, 2011 7:05 pm

probando de esta otra manera y tampoco funciona...

Local nHandle:=0

REDEFINE BUTTONBMP aoBtn[3] ID 402 OF oDls BITMAP "MONITOS" TEXTRIGHT ;
ACTION ( Ocupantes(@cNom2,@cPat2,@cMat2,;
@cNom3,@cPat3,@cMat3,;
@cNom4,@cPat4,@cMat4,VAL(nPax)),;
SetFocus(nHandle),;
nHandle:=0 ) ;
WHEN VAL(nPax) > 1 UPDATE
aoBtn[3]:bGotFocus := {|oBtn,oOld| nHandle:=oOld}

dentro de la funcion Ocupantes abro un dialogo para captura de informacion
algo mas????
:-(
pak-o
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: cual control tuvo el foco

Postby hmpaquito » Thu Aug 11, 2011 7:06 pm

Francisco Horta,

Creo que lo que puede estar pasando es que despues de la ACTION la clase TBtnBmp haga algo con el foco, de manera que aunque lo hubieras puesto bien en tu SetFocus(), la clase lo volveria a poner en el Boton... no estoy seguro que sea eso... pero me suena haber tenido ese problema.

En este tipo de cosas, es decir, asunto foco, muchas veces se hace inmanejable porque las propias clases fwh lo manejan, como no puede ser de otra forma. Lo que hago yo es forzar el foco con un Timer. Es un tanto hacking, pero se le pone un nombre (de funcion) y cuando alguien descubra como devolver a la vida a los criogenizados modificare la funcion de marras para hacerlo de una manera más ortodoxa. Lo puedes adaptar para que en vez de un oFocus, reciba un hFocus. Ahí va:

Code: Select all  Expand view

//-------------------------------------------------------------------------//
FUNCTION xSetFocus(oObj)
Local oTiempo
DEFINE TIMER oTiempo INTERVAL 10 OF oObj:oWnd ;
           ACTION (oObj:SetFocus(), oTiempo:Deactivate())
ACTIVATE TIMER oTiempo
RETURN NIL
*
 


Saludos
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: cual control tuvo el foco

Postby Antonio Linares » Thu Aug 11, 2011 7:28 pm

Francisco,

Prueba a hacerlo asi:

aoBtn[3]:oJump := oControlQueTeniaElFoco
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41320
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: cual control tuvo el foco

Postby Francisco Horta » Thu Aug 11, 2011 7:38 pm

Antonio, probando asi:

tratando de poner el foco directamente en un objeto, no funciona
REDEFINE BUTTONBMP aoBtn[3] ID 402 OF oDls BITMAP "MONITOS" TEXTRIGHT ;
ACTION ( Ocupantes(@cNom2,@cPat2,@cMat2,;
@cNom3,@cPat3,@cMat3,;
@cNom4,@cPat4,@cMat4,VAL(nPax)),;
aoBtn[3]:oJump := aoObjetos[5] )

y con el Handle tampoco
REDEFINE BUTTONBMP aoBtn[3] ID 402 OF oDls BITMAP "MONITOS" TEXTRIGHT ;
ACTION ( Ocupantes(@cNom2,@cPat2,@cMat2,;
@cNom3,@cPat3,@cMat3,;
@cNom4,@cPat4,@cMat4,VAL(nPax)),;
aoBtn[3]:oJump := nHandle )
aoBtn[3]:bGotFocus := {|oBtn,oOld| nHandle:=oOld}

el foco se sigue quedando en el boton
:-(
saludos
pak-o
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: cual control tuvo el foco

Postby Francisco Horta » Thu Aug 11, 2011 7:46 pm

Antonio,

probando asi:
aoBtn[3]:oJump := aoObjetos[5] el foco se queda en el boton, pero si presiono TAB me devuelve al control que tenia el foco anteriormente

probando asi:
aoBtn[3]:oJump := nHandle el foco se queda en el boton, pero si presiono TAB manda este error:
Error description: Error BASE/1004 Class: 'NUMERIC' has no exported method: HWND
Called from: => HWND(0)
Called from: .\source\classes\CONTROL.PRG => TBUTTONBMP:FORWHEN(802)
Called from: .\source\classes\CONTROL.PRG => TBUTTONBMP:FWLOSTFOCUS(928)
Called from: .\source\classes\CONTROL.PRG => TBUTTON:HANDLEEVENT(1468)
Called from: .\source\classes\BUTTONB.PRG => TBUTTONBMP:HANDLEEVENT(189)
Called from: .\source\classes\WINDOW.PRG => _FWH(3409)
Called from: => DIALOGBOX(0)

saludos
pak-o
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: cual control tuvo el foco

Postby Antonio Linares » Thu Aug 11, 2011 7:57 pm

Prueba asi:

aoBtn[3]:oJump := oWndFromHwnd( nHandle )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41320
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: cual control tuvo el foco

Postby Francisco Horta » Thu Aug 11, 2011 8:26 pm

Antonio,
probando, se queda el foco en el boton,,,
ya tambien hice todas las pruebas con y sin el tabstop cambiandolo desde el recurso y no funciona.
probe quitando el control buttonbmp y usando setkey(VK_FX,{||mifuncion}) y si funciona bien, pero la verdad se me vas estetico y presentable con un boton, sino tengo solucion pues usare setkey
gracias
pak-o
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: cual control tuvo el foco

Postby hmpaquito » Fri Aug 12, 2011 7:22 am

Francisco Horta,

Me alegro que mi solucion te haya ayudado. Muchas gracias por mencionarlo y por el feedback. Seguiremos ayudando en todo lo posible.

Bye
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: cual control tuvo el foco

Postby Francisco Horta » Fri Aug 12, 2011 2:23 pm

hmpaquito,
de nada, de hecho el timer lo deje como una ultima opcion, ya que en ese dialgo y otros utilizo timers para actualizaciones, y si funciona, pero el setkey es mas comodo unicamente poniendo una validacion dentro de mi funcion y va bien
saludos
pak-o
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 9 guests