• Viernes 19 de Abril de 2024, 23:35

Autor Tema:  Asociando Eventos A Un Control  (Leído 1336 veces)

fxge

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Asociando Eventos A Un Control
« en: Jueves 29 de Junio de 2006, 21:32 »
0
Necesito crear un componente durante la ejecución del programa. Especificamente un TImage. Mi problema es ¿como puedo asociarle una rutina al evento OnClick del nuevo objeto? No puedo asociar directamente el procedure a la propiedad OnClick por cuanto ésta espera un TnotifyEvent. ¿Alguna sugestión?

Gracias,
Francisco

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Asociando Eventos A Un Control
« Respuesta #1 en: Viernes 30 de Junio de 2006, 02:07 »
0
Si puedes asociar tus propios procedimientos a Eventos de Componentes generados en Tiempo de Ejecucion y en Tiempo de dise;o tambien.
Tiene que ser un procedimiento de tipo TNotifyEvent, es decir con el parametro Sender.
Aqui te pongo un ejemplo.
Código: Text
  1.  
  2. type
  3.   TForm1 = class(TForm)
  4.     Button1: TButton;
  5.     Image1: TImage;
  6.     procedure FormCreate(Sender: TObject);
  7.   private
  8.     { Private declarations }
  9.   public
  10.     Image: TImage;
  11.     procedure MyClick(Sender: TObject);
  12.   end;
  13.  
  14. var
  15.   Form1: TForm1;
  16.  
  17. implementation
  18.  
  19. {$R *.dfm}
  20.  
  21. procedure TForm1.FormCreate(Sender: TObject);
  22. begin
  23.    Image := TImage.Create(Form1); //puede ser Self, nil
  24.    Image.Parent := Form1;
  25.    {.... lo que haga falta}
  26.    Image.OnClick := myClick;
  27. end;
  28.  
  29. procedure TForm1.MyClick(Sender: TObject);
  30. begin
  31.   ShowMessage('presionaste la imagen');
  32. end;
  33.  
  34.  
Tienes que definir un procedimiento  de tipo TEvent:
Código: Text
  1.  
  2. procedure Nombre(Sender:TObject);
  3.  
  4.  
Y luego asignarlo al Evento onClick de la imagen.

Si quieres acceder a las propiedades de la imagen desde el evento on Click, poruqe tienes varias Imagenes, y no sabes en la cual se hizo el Click, usa el parametro Sender con Type Casing>
Código: Text
  1.  
  2.   procedure TForm1.MyClick(Sender: TObject);
  3. begin
  4.    if Sender is TImage then
  5.     begin
  6.         TImage(Sender).Picture.Canvas.Bitmap.SaveToFile('test.bmp'); //guarda la imagen en la que se hizo click
  7.         ShowMessage(InttoStr(TImage(Sender).Width)); //muestra el acho
  8.     end;
  9. end;
  10.  
  11.  

Usando el Sender como si fuera TImage, pudes asignar el mismo procedimiento a Distintas Imagenes..
Código: Text
  1.  
  2. Image1.onClick := myClick;
  3. Image2.onClick := myClick;
  4. ImageN.ohclick := MyClick;
  5.  
  6.  


Cualquier otra duda que surga, no dudes en avisar

Saludos