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-03-2007
ercrizeporta ercrizeporta is offline
Miembro
 
Registrado: jun 2005
Posts: 131
Poder: 19
ercrizeporta Va por buen camino
como se si he pulsado un boton

hola!!tengo el siguiente problema: tengo un campo "tedit" con un evento que ocurre al salir de el (onexit). Lo que me pasa es que las acciones que se ejecutan en el evento onexit solo quiero que se realicen si no se pulsa un botón que tengo en el formulario, es decir si salgo del campo tedit al pulsar ese determinado botón entonces no quiero que se realice. Para ello necesito saber si hay alguna opción para saber si el botón determinado ha sido pulsado o no.

muchas gracias!!!
Responder Con Cita
  #2  
Antiguo 28-03-2007
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,

Puedes valerte de una variable global, o de una propiedad del formulario que alberga botón y casilla de edición:

Código Delphi [-]
unit Form1;

interface

type
  TForm1 = class(TForm)
    {...}
    procedure Edit1Exit(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    FBotonPulsado: boolean;
  end;

implementation

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if not FBotonPulsado then
  begin
    {...}
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FBotonPulsado := true;
  {...}
end;

{...}

end.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 28-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.271
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Mi duda es... ¿Se ejecutará primero en evento OnExit o el OnClick?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 28-03-2007
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 Neftalí
Mi duda es... ¿Se ejecutará primero en evento OnExit o el OnClick?
¿Por?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 29-03-2007
ercrizeporta ercrizeporta is offline
Miembro
 
Registrado: jun 2005
Posts: 131
Poder: 19
ercrizeporta Va por buen camino
el evento que se ejecuta primero es el evento onexit, así que esa posible solución de la variable no es válida, ya que el valor de la variable se modificará una vez haya realizado el evento onexit, y yo necesitaría que se supiera antes del evento...teneis alguna otra idea de como realizarlo??
muchas gracias!!!
Responder Con Cita
  #6  
Antiguo 29-03-2007
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Al hacer clic sobre el botón el edit le pasa el foco al botón, eso lo puedes verificar de esta manera.

Código Delphi [-]
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if not Button1.Focused then
  begin
    ShowMessage('El botón no tiene el foco');
   //Escribo aqui mi rutina
  end;
end;

Sin embargo, existe un caso desfavorable, si el botón recibe el foco no necesariamente implica que se ha pulsado sobre el.

Bueno, espero que esto sea útil de cualquier manera.
Responder Con Cita
  #7  
Antiguo 29-03-2007
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 ercrizeporta
el evento que se ejecuta primero es el evento onexit, así que esa posible solución de la variable no es válida, ya que el valor de la variable se modificará una vez haya realizado el evento onexit, y yo necesitaría que se supiera antes del evento...teneis alguna otra idea de como realizarlo??
Pues entonces entendí mal el asunto. Yo pensaba que se trataba de ejecutar cierto código en el evento "OnExit" del "TEdit" siempre que no se hubiera pulsado previamente un botón. Para esto sirve la solución de la "variable bandera", según yo lo veo.

¿Que no se pulsó el botón? Se ejecuta el código del evento "OnExit" del "TEdit". ¿Que ya se pulsó el botón? El código del evento "OnExit" del "TEdit" ya no se ejecutará. ¿No entendí bien el asunto o qué?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 29-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.271
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por dec
¿Por?
Por que creo que para que funcione la solución con variable deberían ejecutarse justo en el orden inverso a como se ejecutan.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 29-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Yo vengo desde otro frente.

Cita:
Empezado por ercrizeporta
Lo que me pasa es que las acciones que se ejecutan en el evento onexit solo quiero que se realicen si no se pulsa un botón
¿Mal diseño? No puedo asegurarlo porque no hay código y no puedo adivinar qué hace el evento OnExit o el Boton Onclick.

Me recuerda a casos típicos de hacer algo "automáticamente", es decir... "intentos de dar inteligencia al Software". En la mayoría de las ocasiones se trata de un mal planteamiento de la solución, aunque no sé si será este el caso.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 29-03-2007
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
Pues ya Héctor lo dijo. Aun cuando el evento OnExit se ejecuta antes del OnClick, para cuando estamos en OnExit, el botón ya tiene el foco.

A veces era necesario esto por ejemplo para validar un campo, pero si el botón era el de Cancelar, pues la validación no debe tener lugar. Ahra mismo no se me ocurriría una altenativa, pero yo es que de hecho no me gustan las validaciones en cada edit y prefiero hacelas al final, todas juntas, en el evento OnCloseQuery.

// Saludos
Responder Con Cita
  #11  
Antiguo 03-04-2007
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
Reabro este hilo porque he tenido la misma necesidad que el compañero, y efectivamente Hector tiene razón.

Pero deja de funcionar si quiero evitar el evento OnExit al pulsar sobre dos botones (pulsar sobre cualquiera de ellos, claro).

Ejemplo:
Código:
procedure TFMantoContratos.NumContratoExit(Sender: TObject);
begin
 if (not BCancelar.Focused)  or (not BNContratoAutomatico.Focused) then 
    begin
       // las instrucciones del OnExit
    end;
deja de funcionar para los dos botones.

¿a alguien se le ocurre alguna idea?
__________________
Rafita.
Responder Con Cita
  #12  
Antiguo 03-04-2007
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
MIL PERDONES.

Me equivoqué en lo más básico: cambié un AND por un OR, y ese era el fallo.

Código:
  if (not BCancelar.Focused) and (not BNContratoAutomatico.Focused) then
Ahora si funciona para todos los botones que haga falta.
Gracias Hector por la respuesta tan útil.
__________________
Rafita.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como anular el ModalResult de un botón ? carlosmari Varios 13 14-03-2007 23:43:39
Como saber el Numero de Item pulsado de un TPopupMenu FNADALO OOP 6 06-08-2004 13:57:02
he pulsado el botón enviar?? valentine API de Windows 7 02-06-2004 17:21:54
¿Cómo saber si esta pulsado un componente en Delphi con una pantalla táctil? Ayoze Varios 3 26-05-2004 19:21:52
Quiero Saber como hacer que un boton se vea que esta siendo pulsado Julio César Varios 2 27-11-2003 18:34:11


La franja horaria es GMT +2. Ahora son las 16:39:40.


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