Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-09-2005
ingel ingel is offline
Miembro
 
Registrado: jun 2003
Posts: 239
Poder: 21
ingel Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 28-09-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
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:
como detalle si quiero ver el valor de bcancelar.focused con ctrl+f7
3ro Como asi?
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #3  
Antiguo 28-09-2005
ingel ingel is offline
Miembro
 
Registrado: jun 2003
Posts: 239
Poder: 21
ingel Va por buen camino
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 ..
Responder Con Cita
  #4  
Antiguo 28-09-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por ingel
No comprendo porque decis que no va a pasar por el else , si esta evaluando el if ....
Es que hay un pequeño error en lo que dice vtdeleon

Cita:
Empezado por vtdeleon
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
Es al contrario. Al momento de dar click en el botón, primero se ejecuta el OnExit y luego el botón toma el foco. Por eso tu else no se ejecuta nunca pues en el momento del OnExit el foco sigue estando en el Edit.

// Saludos
Responder Con Cita
  #5  
Antiguo 28-09-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por roman
Es que hay un pequeño error en lo que dice vtdeleon
Oops. Creí que el codigo expuesto estaba en el evento Onclick del Boton Cancelar
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #6  
Antiguo 29-09-2005
ingel ingel is offline
Miembro
 
Registrado: jun 2003
Posts: 239
Poder: 21
ingel Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 29-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por ingel
tengo forma de saber que me presioanron el boton cancelar aunque el foco siga en el edit?
Creo que ahí hay una contradicción, puesto que, si se hace clic en el botón obviamente el foco estará en el botón y no en el "edit"... ¿no es así?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 29-09-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

que use Un TSpeedButton, que este no obtiene el foco.

Creo que debe haber un analisis mejor sobre el manejo del eventos
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #9  
Antiguo 29-09-2005
ingel ingel is offline
Miembro
 
Registrado: jun 2003
Posts: 239
Poder: 21
ingel Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 29-09-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Vamos a recapitular.

Para empezar, cuando vtdleon dijo al principio:

Cita:
Empezado por vtdleon
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.
él tenía toda la razón, yo estaba equivocado, lo cual se puede verificar simplemente poniendo:

Código Delphi [-]
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Assert(Button1.Focused);
end;

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:

Código Delphi [-]
if not bcancelar.focused then ejecutarcodigo
else bCancelarClick(self);

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
Responder Con Cita
  #11  
Antiguo 30-09-2005
ingel ingel is offline
Miembro
 
Registrado: jun 2003
Posts: 239
Poder: 21
ingel Va por buen camino
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
Responder Con Cita
  #12  
Antiguo 30-09-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Que extraño
Código Delphi [-]
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if Button1.Focused then
    ShowMessage('Boton con foco')
  else
    ShowMessage('OnExit');
end;
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
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #13  
Antiguo 30-09-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por vtdeleon
Que extraño
Pue sí que es raro. Ya lo he probado con todas las versiones de la 3 a la 7 y obtengo los mismos resultados que vtdleon.

// Saludos
Responder Con Cita
  #14  
Antiguo 30-09-2005
ingel ingel is offline
Miembro
 
Registrado: jun 2003
Posts: 239
Poder: 21
ingel Va por buen camino
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
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
Responder Con Cita
  #15  
Antiguo 30-09-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Cita:
Empezado por roman
Ya lo he probado con todas las versiones de la 3 a la 7 y
Wow, tienes una colección
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:43:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi