Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Capturar evento Dobleclick (https://www.clubdelphi.com/foros/showthread.php?t=6679)

ivanmm 18-01-2004 13:36:15

Capturar evento Dobleclick
 
Hola a todos, tengo 2 problemillas que me estan quitando el sueño y a lo mejor es una tonteria:

1º: No se como se puede capturar el evento DobleClick,es decir, por ejemplo preguntar en un procedimiento si se ha hecho dobleclick sobre un objeto que tengo en el form.

2º:Tengo en el form varios objetos del mismo tipo y quiero hacer un procedimiento generico que cuando se haga un click en alguno de ellos, haga ciertas acciones.Se que esto se podria hacer en el evento OnClick de cada uno de ellos, pero me gustaria encontrar la forma de hacer una funcion o procedimiento generico.


Muchas gracias a todos.

__cadetill 18-01-2004 14:08:49

Cita:

Empezado por ivanmm
2º:Tengo en el form varios objetos del mismo tipo y quiero hacer un procedimiento generico que cuando se haga un click en alguno de ellos, haga ciertas acciones.Se que esto se podria hacer en el evento OnClick de cada uno de ellos, pero me gustaria encontrar la forma de hacer una funcion o procedimiento generico.

Cuando "salta" el evento OnClick o OnDblClick de un objeto, el parámetro que se recibe (Sender) puede ayudarte a este menester

Código:

procedure TForm1.Button1DblClick(Sender: TObject);
begin
  // cosas comunes
.......
  if Sender = Button1 then
  begin
    // lo que sea del Button1
  end;
  if Sender = Button2 then
  begin
    // lo que sea del Button2
  end;
  // más cosas comunes
........
end;

Luego, sólo has de asignar en el Inspector de Objetos el mismo evento a todos los objetos que quieras (siempre y cuando tengan los mismos parámetros). Si no tubieran los mismos parámetros, tendrás que crearte un procedure a parte

Código:

procedure TFomr1.MiProc(Sender: TObject);
begin
  // lo mismo que antes
end;

procedure TForm1.Objecto1DblClick(Sender: TObject; otros parámetros);
begin
  MiProc(Sender);
end;

procedure TForm1.Objeto2DblClick(Sender: TObject; parámetros diferentes);
begin
  MiProc(Sender);
end;

Espero te sirva

eduarcol 18-01-2004 18:30:08

Cita:

1º: No se como se puede capturar el evento DobleClick,es decir, por ejemplo preguntar en un procedimiento si se ha hecho dobleclick sobre un objeto que tengo en el form.
porq no colocas una variable bandera(Flag), que se active cuando se ejecute el evento dobleclick??

santana 18-01-2004 18:41:52

Si los objetos son del mismo tipo, por ejemplo buttons, yo también les asigno un tag y hago mas o menos esto

Código:

with (Sender as TBitbtn) do begin
case tag of
1: begin
  Application.CreateForm(TForm1, Form1);
  Form1.show;
  end;
2: begin
  Application.CreateForm(TForm2, Form2);
  Form2.show;
  end;
3: begin
  Application.CreateForm(TForm3, Form3);
  Form3.show;
  end;
end;


Al González 18-01-2004 19:21:58

Manejadores de eventos compartidos
 
¡Buen día a todos!

Es decir, varios componentes pueden compartir el mismo manejador de evento (procedimiento genérico común) para uno de sus eventos en particular. Al ejecutarse un manejador de evento compartido, el parámetro Sender (remitente) es el objeto que disparó el evento (el componente para el cual se está ejecutando).

Para crear un manejador de evento compartido, aconsejo seleccionar todos los componentes que tendrán en común ese manejador de evento, y enseguida, con el inspector de objetos, escribir un nombre adecuado para el manejador en la celda correspondiente al evento en cuestión.

Espero esto sea de utilidad. Seguimos en contacto.

Al González :).

Descendents 18-01-2004 23:41:00

Yo te doy ideas, que no significan que sean las mejores.

1.Puedes recorrerte todos los componentes y en el que tenga el evento doble click asignarle un procedimineto, que te hara lo que quieres, y que te diga cuando ha sido pulsado el objeto y qual es.

2.recuperar el mensaje de windows del doble click del raton y mirar donde esta l cursor en ese momento.Segun donde este, si hay un componente en ese lugar pues mirar qual es.

Suerte
Saludos


La franja horaria es GMT +2. Ahora son las 23:32:37.

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