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 24-08-2010
Livey Livey is offline
Miembro
 
Registrado: jul 2010
Ubicación: Costa Rica
Posts: 33
Poder: 0
Livey Va por buen camino
grid1.onexit vrs grid2.onclick

Les agradeceria me ayudaran con esto...
El caso es el siguiente:
Estoy trabajando con Delphi 5 y estoy trabajando con dos grids en la misma forma.
A grid1 le hice validaciones en el onexit y el grid2 tiene validaciones en el onclick.
El problema es que cuando estoy editando en el grid1 y doy click en el grid2, lo que pasa es que ejecuta primero el evento de grid2.onclick y luego ejecuta grid1.onexit.
Pero yo requiero que se ejecute primero el evento del grid1.onexit y dependiendo de las validaciones que se realicen ahi, se ejecute o no el evento del grid2.onclick

De nuevo gracias por la ayuda que me puedan brindar.
__________________
Keilly Livey Chinchilla Salas
Responder Con Cita
  #2  
Antiguo 25-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Livey.

Si estás en grid1, al hacer click en otro control, grid1 pierde el foco, por lo tanto se dispara el evento grid1.OnExit.

Por lo tanto: Si el foco está en grid1 y hacés click sobre grid2, el orden de disparo de los eventos es:
1. grid1.OnExit
2. grid2.OnClick

No veo manera de que se te invierta ese órden... pero habría que ver el código.

Saludos.

Última edición por ecfisa fecha: 25-08-2010 a las 01:58:41.
Responder Con Cita
  #3  
Antiguo 25-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Y no depende de lo que se ponga en el evento onexit del dbgrid1 ?
Por que ahi se puede poner lo que se quiera, incluso una condicion con respecto al dbgrid2.
Me equivoco?
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 25-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Caral Ver Mensaje
Hola
Y no depende de lo que se ponga en el evento onexit del dbgrid1 ?
Por que ahi se puede poner lo que se quiera, incluso una condicion con respecto al dbgrid2.
Me equivoco?
Saludos
Si mi amigo, tenés razón, puede llamar a cualquier evento, condicion, hasta reiniciar la PC si lo desea.
Pero no te olvides que para que ese echo suceda, antes tiene que haberse disparado grid1.OnExit.


Saludos.

Última edición por ecfisa fecha: 25-08-2010 a las 04:56:45.
Responder Con Cita
  #5  
Antiguo 25-08-2010
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Estube haciendo unas pruebas. Con unos StringGrid y DBGrid ya que no especificas cual usas y siempre se ejecuta el evento OnExit antes del click en el segundo Grid.

Talvez podrias poner parte de tu codigo para que te podamos dar un poco mas de ayuda.
Responder Con Cita
  #6  
Antiguo 26-08-2010
Livey Livey is offline
Miembro
 
Registrado: jul 2010
Ubicación: Costa Rica
Posts: 33
Poder: 0
Livey Va por buen camino
Algo que no mencione es que el grid1 esta en un tabsheet y el grid2 esta en la forma como tal.
Si estoy editando en el grid1 y doy click en otro componente que se encuentre en el tabsheet, se ejecuta primero el evento grid1.onclick y luego el evento del click del otro componente, pero no sucede asi si doy click en el grid2, tambien se da en los botones del toolbar; ejecuta primero el evento del click y luego grid1.onclick
La medida que tome fue hacer una validación en cada uno de los componente que me genera problemas
Código Delphi [-]Function TFPrProy.ValidaDisp(Sender: TObject):Boolean; Begin If (Sender <> GrDistrFond) and ValDisp then Begin GrDistrFond.OnExit(Sender); If not ValDisp then Grid.SetFocus; End; Result := ValDisp; End;


Entonces dependiendo lo que retorne esa funcion se ejecuta los eventos del onclick de los diferentes componentes
__________________
Keilly Livey Chinchilla Salas
Responder Con Cita
  #7  
Antiguo 26-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Si estoy editando en el grid1 y doy click en otro componente que se encuentre en el tabsheet, se ejecuta primero el evento grid1.onclick
Hola Livey.

No importa donde esté hubicado grid1.

Insisto, si como decís, estás editando en grid1 (grid1 tiene el foco) y hacés click sobre otro control, primero se
ejecuta grid1.OnExit por que este evento se produce cuando el control pierde el foco.

Es más, si acabás de hacer un click sobre otro control... ¿ Como podría disparase grid1.OnClick ?

Es muy fácil de comprobar, poné en un form:
.- Dos StringGrid donde quieras: tabsheet, solos ... (Supongo que son StringGrid por que DBGrid no tinene el evento OnClick)
.- Varios controles que puedan recibir el foco.
.- Asigna:

Código Delphi [-]
procedure TForm1.grid1Click(Sender: TObject);
begin
  showMessage('grid1 on click');
end;
Código Delphi [-]
procedure TForm1.grid1Exit(Sender: TObject);
begin
  showMessage('grid1 on exit');
end;
Y verificalo.

En mis pruebas, con y sín TabSheet, el único grid1.OnClick que recibí fue cuando hice click sobre grid1.

Saludos.

Última edición por ecfisa fecha: 26-08-2010 a las 20:43:23.
Responder Con Cita
  #8  
Antiguo 26-08-2010
Livey Livey is offline
Miembro
 
Registrado: jul 2010
Ubicación: Costa Rica
Posts: 33
Poder: 0
Livey Va por buen camino
Quizas no me explique bien, no es que siempre se ejecuta grid2.onclick, sino se ejecuta el click de componente que clickeo.
Crei que quizas era alguna propiedad que permitia esto.
Le doy la razon no es lógico, pero se me esta dando, porqué? ni idea.
Lo curioso es que siempre y cuando de click en componentes que estan en el tabsheet si se ejecuta primero grid1.onexit, pero si es en un componente fuera del tabsheet, ejecuta primero el click del componente y luego ejecuta el grid1.onexit.
__________________
Keilly Livey Chinchilla Salas
Responder Con Cita
  #9  
Antiguo 26-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Livey.

A ver...

La cuestión es quien tiene el foco y si tiene o nó declarada una respuesta en el evento.

Lo que yo quiero decir es que si cada control tiene asignado algo a sus eventos OnClick y OnExit, y estando en un control en particular, si se hace click sobre el otro, el orden de disparo de los eventos es:

1) Control1.OnExit.
2) Control2.OnClick.

Ahora, ¿ Como puede pasar lo que sucede ?

La única manera que me ocurre es:
Tenemos dos controles Ctrl1 y Ctrl2 y tienen sus eventos asignados de este modo.
Ctrl1:
Código Delphi [-]
procedure Ctrl1Click(Sender: TObject);
begin
  ShowMessage('Ctrl1 OnClick');
end;

Ctrl1.OnExit = nil (ningún evento asignado)

Ctrl2:
Código Delphi [-]
procedure Ctrl2Click(Sender: TObject);
begin
  ShowMessage('Ctrl2 OnClick');
end;

procedure Ctrl2Exit(Sender: TObject);
begin
  ShowMessage('Ctrl2 OnExit');
end;

Ahora supongamos que estamos con foco en Ctrl1. Si hago click sobre Ctrl2, es lógico que no voy a recibir respuesta del evento
Ctrl1.OnExit y sí el mensaje 'Ctrl2 OnClick'.

Saludos.

Última edición por ecfisa fecha: 26-08-2010 a las 21:26:26.
Responder Con Cita
  #10  
Antiguo 26-08-2010
Livey Livey is offline
Miembro
 
Registrado: jul 2010
Ubicación: Costa Rica
Posts: 33
Poder: 0
Livey Va por buen camino
Ok voy a verificar bien lo del focus, pero dime si estoy equivocada, se supone que si yo estoy escribiendo en el grid1, significa que el focus se encuentra en él.
__________________
Keilly Livey Chinchilla Salas
Responder Con Cita
  #11  
Antiguo 26-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Livey Ver Mensaje
Ok voy a verificar bien lo del focus, pero dime si estoy equivocada, se supone que si yo estoy escribiendo en el grid1, significa que el focus se encuentra en él.
Totalmente.

Saludos.
Responder Con Cita
  #12  
Antiguo 26-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo Livey.

Te paso el código simple que realizé de prueba.

El Form tiene un PageControl con un TabSheet y dentro de él un StringGrid (grid1) y un Button.
En el Form puse el segundo StringGrid (grid2) y otro Button (Creo que así estaba dispuesto tu form).

Quizá te sirva para individualizar el problema.

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, ComCtrls;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    grid1: TStringGrid;
    grid2: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    procedure grid1Click(Sender: TObject);
    procedure grid1Exit(Sender: TObject);
    procedure grid2Click(Sender: TObject);
    procedure grid2Exit(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button1Exit(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button2Exit(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation  {$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  // esto lo podés asignar en tiempo de diseño,
  // pero así evitamos cualquier olvido
  grid1.OnClick:= grid1Click;
  grid1.OnExit:= grid1Exit;
  grid2.OnClick:= grid2Click;
  grid2.OnExit:= grid2Exit;
  Button1.OnClick:= Button1Click;
  Button1.OnExit:= Button1Exit;
  Button2.OnClick:= Button2Click;
  Button2.OnExit:=  Button2Exit;
end;

procedure TForm1.grid1Click(Sender: TObject);
begin
  ShowMessage('grid1 OnClick');
end;

procedure TForm1.grid1Exit(Sender: TObject);
begin
  ShowMessage('grid1 OnExit');
end;

procedure TForm1.grid2Click(Sender: TObject);
begin
  ShowMessage('grid2 OnClic');
end;

procedure TForm1.grid2Exit(Sender: TObject);
begin
  ShowMessage('grid2 OnExit');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Button1 OnClick');
end;

procedure TForm1.Button1Exit(Sender: TObject);
begin
  ShowMessage('Button1 OnExit');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage('Button2 OnClick');
end;

procedure TForm1.Button2Exit(Sender: TObject);
begin
  ShowMessage('Button2 OnExit');
end;
end.

Saludos.
Responder Con Cita
  #13  
Antiguo 26-08-2010
Livey Livey is offline
Miembro
 
Registrado: jul 2010
Ubicación: Costa Rica
Posts: 33
Poder: 0
Livey Va por buen camino
Smile

Gracias. Voy a seguir intentando
__________________
Keilly Livey Chinchilla Salas
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
Cancelar accion de un evento OnExit FGarcia Varios 5 11-05-2007 13:38:18
Evento 'OnExit' del Form Wellnic OOP 3 10-04-2007 19:08:51
Problemas con evento OnExit santi33a Varios 4 15-04-2006 13:30:50
Evento OnExit de un Edit Caro OOP 1 03-02-2006 17:57:01
OnExit DarioArg Varios 2 12-03-2005 02:34:55


La franja horaria es GMT +2. Ahora son las 05:22:33.


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