![]() |
Controlar el foco al salir de un edit
Hola a todos .. .
tengo el sig. inconveniente ..Estoy en un edit y en el OnExit ejecuto cierto codigo que NO debe ejecutarse si se presiona un boton bCancelar por lo que escribi un codigo parecido a : if not bcancelar.focused then ejecutarcodigo else bCancelarClick(self); /*o cualquier cosa ... pero no hace nada*/ o alguna variante mas ..pero no ejecuta el bCancelarClick (ni cualquier otro codigo que ponga) y me manda el foco a 'otro' edit del form .. y como detalle si quiero ver el valor de bcancelar.focused con ctrl+f7 me da access violation ... que estoy haciendo mal ? Gracias a todos como siempre por su tiempo Ingel |
Saludos
1ro Al momento de dar click en el boton cancelar, este toma el foco y despues ejecuta tu codigo, por lo tanto nunca entrara en el Else. Trata de manejar esto de otra forma 2do Si te manda el foco a otro edit(cuando pulsas el boton supongo) es porque tienes algun codigo que hace esto. Cita:
|
no comprendo bien el orden de ejecucion
pues si pongo un showmessage en el else , me lo muestra , pero no me ejecuta si pongo el bcancelarclick() . Por mas que el foco este en el boton , primero deberia hacer lo que dice el Onexit del Edit .. o no ?
y si ahi pregunto por por boton.focused ..debiera ser true .. no ? No comprendo porque decis que no va a pasar por el else , si esta evaluando el if .... saludos Gracias .. |
Cita:
Cita:
// Saludos |
Saludos
Cita:
|
y como puedo solucionarlo ?
tengo forma de saber que me presioanron el boton cancelar aunque el foco siga en el edit?
Evidentemente la propiedad focused no me sirve? Saludos Gracias Ingel |
Hola,
Cita:
|
Saludos
que use Un TSpeedButton, que este no obtiene el foco. Creo que debe haber un analisis mejor sobre el manejo del eventos |
no se donde estara el foco ...
pero lo primero que se ejecuta , al clickear el boton cancelar es el evento OnExit del EDIT ( o me equivoco ? ) . Debe haber una forma de saber que se presiono el boton cancelar ( voy a decir una antiguedad , pero tipo el Lastkey de clipper .. ) ..probe poniendo un showmessage en todos los eventos del boton .. pero siempre ejecuta el OnExit del Edit ...
(El foco sigue en el Edit.. edit.focused me da true en el evento onexit) SAludos Ingel |
Vamos a recapitular.
Para empezar, cuando vtdleon dijo al principio: Cita:
La aserción será cierta si se oprime el botón y falsa en cualquier otro caso. Yo le propongo a ingel que exponga desde el comienzo lo que quiere hacer porque semánticamente es raro lo que originalmente puso:
Esto está diciendo: "Si no se oprimió el botón Cancelar ejecútese algo, de lo contrario oprímase Cancelar" pero lo contrario es que sí se oprimió así que ¿para qué volver a hacerlo? // Saludos |
recapitulando...
Lo que quiero hacer es en el ONEXIT de un EDIT ejecutar un codigo 'siempre', SALVO que se presione el boton CANCELAR.
- Con el foco en el TEDIT , si presiono el TBitBtn CANCELAR , lo priemro que ejecuta es el evento OnExit del Tedit y ahi dentro 'todo lo que pongo' que haga referencia al boton CANCELAR me da access violation por lo tanto no encuentro forma de saber si se presiono o no dicho boton. el codigo del OnExit seria asi procedure TForm1.Edit1Exit(Sender: TObject); begin EjecutarCodigo; end; mi intencion era agregar algo como : if not Cancelar.focused then EjecutarCodigo; pero no funciona. El Assert(Cancelar.focused) tampoco me responde . y si ahi pregunto por Edit1.focused SI ME DA TRUE ..por lo que presumo que el foco SIGUE en el EDIT (aun despues de haber presionado el boton CANCELAR)... Saludos Ingel |
Saludos
Que extraño:confused: Hice esto con un solo botón y dos edit, y cada vez que doy click al boton éste presenta el 1er mensaje. Si el foco se va hacia el edit2 presenta el 2do mensaje |
Cita:
// Saludos |
hay algo que se me esta escapando ..
Reproduje tambien el ejemplo y si el foco esta en el primer edit y 'toco' el boton aparece el primer mensaje , si lo 'toco' el segundo edit ,sale el segundo mensaje y es correcto porque el foco no esta en el boton ...esta en el segundo edit ... no comprendo lo raro ..perdon :confused:
No se si es eso a lo que se referian .... lo que si me parece raro es que si debugueo y activo el crtl+F7 en el onexit del primer edit para TODOS los EDITs (del form) la expresion edit.focused me da TRUE .. cuando en realidad el foco esta en el boton CANCELAR ... y el cancelar.focused me da acces violation . :( me esta superando el tema ... Lo solucioné mas o menos a los 'tirones' .. pero no me queda muy claro .. Gracias... saludos Ingel |
Saludos
Cita:
|
La franja horaria es GMT +2. Ahora son las 05:48:41. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi