In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Como mandar el foco a un control, Helppp?

Foro de Xailer profesional en español
Responder
Toni Sales
Mensajes: 69
Registrado: Jue Abr 07, 2005 7:47 pm

Como mandar el foco a un control, Helppp?

Mensaje 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)Â
Paco V
Mensajes: 380
Registrado: Jue Oct 27, 2005 9:08 am

Como mandar el foco a un control, Helppp?

Mensaje 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
>
>
Toni
Mensajes: 65
Registrado: Mar Sep 30, 2008 9:55 pm

Como mandar el foco a un control, Helppp?

Mensaje 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
>>
>>
>
>
Rene Flores
Mensajes: 620
Registrado: Jue Mar 23, 2006 2:39 am

Como mandar el foco a un control, Helppp?

Mensaje 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
>
>
Angel
Mensajes: 135
Registrado: Mié Mar 21, 2007 1:11 pm

Como mandar el foco a un control, Helppp?

Mensaje 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.
------------------------------------------------------------ -----------------
Toni
Mensajes: 65
Registrado: Mar Sep 30, 2008 9:55 pm

Como mandar el foco a un control, Helppp?

Mensaje 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
Angel
Mensajes: 135
Registrado: Mié Mar 21, 2007 1:11 pm

Como mandar el foco a un control, Helppp?

Mensaje 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
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9252
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Como mandar el foco a un control, Helppp?

Mensaje 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
>
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Como mandar el foco a un control, Helppp?

Mensaje 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
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Toni
Mensajes: 65
Registrado: Mar Sep 30, 2008 9:55 pm

Como mandar el foco a un control, Helppp?

Mensaje 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
>
Toni
Mensajes: 65
Registrado: Mar Sep 30, 2008 9:55 pm

Como mandar el foco a un control, Helppp?

Mensaje 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
Responder