Página 1 de 1

Como mandar el foco a un control, Helppp?

Publicado: Mar Sep 30, 2008 8:34 pm
por Toni Sales
Ignacio/Jose
Algo muy evidente debo estar haciendo mal.
Tengo los siguientes controles en un formulario: tEdit1, tEdit2, tEdit3
Intento al abandonar el tEdit3 pasarle el foco al tEdit2 utilizando un
tEdit2:setfocus() desde el OnExit pero no consigo que funcione.
Adjunto un pequeño ejemplo.
Saludos
Toni Sales


Attached files focus.zip (1.9 KB)Â

Como mandar el foco a un control, Helppp?

Publicado: Mar Sep 30, 2008 8:59 pm
por Paco V
Asi funciona.
::tEdit2:SetFocus()
Paco V
"Toni Sales" <toni.sales@gmail.com> escribió en el mensaje
news:48e27076$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Ignacio/Jose
>
> Algo muy evidente debo estar haciendo mal.
> Tengo los siguientes controles en un formulario: tEdit1, tEdit2, tEdit3
> Intento al abandonar el tEdit3 pasarle el foco al tEdit2 utilizando un
> tEdit2:setfocus() desde el OnExit pero no consigo que funcione.
>
> Adjunto un pequeño ejemplo.
>
> Saludos
> Toni Sales
>
>

Como mandar el foco a un control, Helppp?

Publicado: Mar Sep 30, 2008 9:55 pm
por Toni
Paco
Pues en el ejemplo no funciona. ¿Lo has probado?
Saludos
"Paco V." <ssi@ono.com> escribió en el mensaje
news:[email=48e27712@ozsrv2.ozlan.local...]48e27712@ozsrv2.ozlan.local...[/email]
> Asi funciona.
>
>
> ::tEdit2:SetFocus()
>
> Paco V
>
> "Toni Sales" <toni.sales@gmail.com> escribió en el mensaje
> news:48e27076$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
>> Ignacio/Jose
>>
>> Algo muy evidente debo estar haciendo mal.
>> Tengo los siguientes controles en un formulario: tEdit1, tEdit2, tEdit3
>> Intento al abandonar el tEdit3 pasarle el foco al tEdit2 utilizando un
>> tEdit2:setfocus() desde el OnExit pero no consigo que funcione.
>>
>> Adjunto un pequeño ejemplo.
>>
>> Saludos
>> Toni Sales
>>
>>
>
>

Como mandar el foco a un control, Helppp?

Publicado: Mié Oct 01, 2008 3:36 am
por Rene Flores
Toni:
Creo.... ojo CREO que estas haciendo mal el paso del foco, o bueno lo
estás haciendo en el evento incorrecto, el OnExit siempre regresa al
objeto del cual fue llamado, luego entonces no puedes cambiar el foco
dentro de este evento, porque efectivamete lo cambia al que tu le dices,
pero el retunr del onExit lo devuelve al objeto el cual llamo el evento.
Saludos
Rene Flores
http://www.ciber-tec.com
--------------------------
Nos vemos en España !!!!
Del 21 de Noviembre al 1 de Diciembre 2008
Mas informes:
http://www.geroa-software.com/cursos/
Sales escribió:
> Ignacio/Jose
>
> Algo muy evidente debo estar haciendo mal.
> Tengo los siguientes controles en un formulario: tEdit1, tEdit2, tEdit3
> Intento al abandonar el tEdit3 pasarle el foco al tEdit2 utilizando un
> tEdit2:setfocus() desde el OnExit pero no consigo que funcione.
>
> Adjunto un pequeño ejemplo.
>
> Saludos
> Toni Sales
>
>

Como mandar el foco a un control, Helppp?

Publicado: Mié Oct 01, 2008 9:15 am
por Angel
El problema es el que te comentó Rene, el evento OnExit no permite el
cambio de foco mediante SetFocus().
En la ayuda del evento, aparece la explicación:
------------------------------------------------------------ --------------
TStdControl:OnExit
Evento que se produce cada vez que pierde foco el control.
Parametros:
<oSender>:
Referencia al objeto que provoca el evento
<oNextCtl>:
Objeto que va a recibir el foco
Valor Retorno:
<Nil>:
Ninguna acción
<.F.>:
Se anula la perdida de foco en el control y por lo tanto no lo recibe
oNextCtl
Nota: En ningún caso puede cambiar el foco desde el código de este
evento, es decir, no debe utilizar el método SetFocus.
------------------------------------------------------------ -----------------

Como mandar el foco a un control, Helppp?

Publicado: Mié Oct 01, 2008 9:37 am
por Toni
Gracias a los dos por la explicación y por tanto ¿Como consigo manipular el
foco sin hacer inventos?. Siguiendo el manual el indica que si se pasa un
parámetro .T. se fuerza a que el control coja el foco, pero ¿Donde?.
En bastante habitual tener el control del foco en una aplicación ¿no?.
Saludos
Toni Sales

Como mandar el foco a un control, Helppp?

Publicado: Mié Oct 01, 2008 10:10 am
por Angel
Toni Sales escribió:
> Gracias a los dos por la explicación y por tanto ¿Como consigo manipular el
> foco sin hacer inventos?. Siguiendo el manual el indica que si se pasa un
> parámetro .T. se fuerza a que el control coja el foco, pero ¿Donde?.
>
> En bastante habitual tener el control del foco en una aplicación ¿no?.
>
> Saludos
> Toni Sales
En el mismo evento OnExit, podrias hacer algo como:
METHOD ObjectOnExit(oSender, oNextCtl) CLASS ....
IF(condicion)
...
...
RETURN .F. //El control no perderí­a el foco
ELSE
oNextCtl:=::oObj //Recibiendo oObj el foco
END IF
RETURN NIL

Como mandar el foco a un control, Helppp?

Publicado: Mié Oct 01, 2008 10:10 am
por ignacio
Toni,
Lo que te ha dicho René es correcto. No se pueden realizar cambios de foco
de forma manual desde un evento OnExit.
Hay varias formas de arreglarlo:
1) oControlDestino:PostMsg( WM_SETFOCUS )
Que consisten en mandar un mensaje de cambio de foco cuando se hayan
procesado todo los mensajes. Sin embargo, a mi no me gusta porque lo suyo es
llamar al método SetFocus() y no solamente mandar un mensaje, y es muy
posible que tengas efectos extraños como que el 'caret' se quede en un
control y el foco en otro.
2) Creas una propiedad de nombre oJump en el formulario y el método
WMXailer() con el siguiente código:
METHOD WMXailer() INLINE ::oJump:SetFocus()
En tu evento OnExit harías:
::oJump := ::oControlDestino
::PostMsg( WM_XAILER )
Un saludo
--
Ignacio Ortiz de Zúñiga
[Soporte Xailer]
[Xailer support]
"Toni Sales" <toni.sales@gmail.com> escribió en el mensaje
news:48e327e0$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Gracias a los dos por la explicación y por tanto ¿Como consigo manipular
> el foco sin hacer inventos?. Siguiendo el manual el indica que si se pasa
> un parámetro .T. se fuerza a que el control coja el foco, pero ¿Donde?.
>
> En bastante habitual tener el control del foco en una aplicación ¿no?.
>
> Saludos
> Toni Sales
>

Como mandar el foco a un control, Helppp?

Publicado: Mié Oct 01, 2008 11:42 am
por jfgimenez
Toni,
hemos estado revisando toda la parte de la gestión del foco, y creo que
hemos conseguido lo que quieres. Al menos, el ejemplo que has puesto
funciona ahora correctamente. No obstante, debido a los cambios internos que
ha habido que hacer, esta modificación estará sólo en la 2.0 que
publicaremos entre mañana y pasado.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info

Como mandar el foco a un control, Helppp?

Publicado: Mié Oct 01, 2008 1:52 pm
por Toni
Gracias a todos por responder y por la solucion.
Saludos
Toni Sales
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=48e34617@ozsrv2.ozlan.local...]48e34617@ozsrv2.ozlan.local...[/email]
> Toni,
>
> hemos estado revisando toda la parte de la gestión del foco, y creo que
> hemos conseguido lo que quieres. Al menos, el ejemplo que has puesto
> funciona ahora correctamente. No obstante, debido a los cambios internos
> que ha habido que hacer, esta modificación estará sólo en la 2.0 que
> publicaremos entre mañana y pasado.
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
>

Como mandar el foco a un control, Helppp?

Publicado: Mié Oct 01, 2008 4:50 pm
por Toni
Bueno
Miestras no llega la version final 2.0 un forma que he visto de poderlo
hacerlo es como indica Ángel pero MUY importante realizar un RETURN .F.
Sin esto no funciona.
El codigo quedaria así
//---------------------------------------------------------- --------------------
METHOD Edit3Exit( oSender, oNextCtl ) CLASS TForm1
oNextCtl := ::oEdit2
::oEdit2:SetFocus(.t.)
RETURN .F.
Saludos
Toni Sales