Delphi - Como saber que objeto fue pulsado

   
Vista:

Como saber que objeto fue pulsado

Publicado por Judit (45 intervenciones) el 23/05/2008 01:42:10
Buenas Noches!!

Mi pregunta es como saber cual objeto fue pulsado.

Me explico, en un formulario yo creo varios dbimages en tiempo de ejecucion, los nombres se los asignos desde el 1 hasta n (dbimage1, dbimage2...dbimagen), pero al momento de darle un click no se el nombre de ese dbimage, por eso me gustaria saber el nombre al darle un click al dbimage.

Espero haberme exlicado

Gracias anticipadas

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Como saber que objeto fue pulsado

Publicado por E.T. (1108 intervenciones) el 23/05/2008 17:23:32
Que tal, eso el algo relativamente sencillo:

Primero declara un procedimiento como el que te pongo aquí

//Esta linea va en la parte donde se declara la clase de la forma, donde está todos los procedimientos, es la declaración del procedimiento

procedure MyOnClick(Sender: TObject);

//Estas lineas ya son parte del codigo, es lo que va a hacer el procedimiento

procedure TForm1.MyOnClick(Sender: TObject);
begin
Showmessage((Sender as TImage).Name);
end;

Luego, no se como crees tu tus TImage, yo lo hago de la siguiente manera:

for i:=1 to 5 do begin //Yo creo para el ejemplo 5 TImages
TImage.Create(self).Name:='Image'+inttostr(i);// Les asigno nombre, como tú
with TImage(FindComponent('Image'+inttostr(i))) do begin //Esta linea localiza el componente recié creado
Parent:=Form1;
Width:=75;
Height:=75;
Left:=75*(i-1)+(8*i);
Top:=50;
OnClick:=MyOnClick; //En esta linea se asigna el procedimiento que creamos, ojo sin parámetros, sino no funciona
Canvas.FillRect(rect(0,0,75,75));// Esta linea nos pinta el TImage para poder verlo
end;
end;

Ahora al darle click a cualquiera, te regresa su nombre en un mensaje
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como saber que objeto fue pulsado

Publicado por Judit (45 intervenciones) el 23/05/2008 19:10:07
Muchas gracias por tu respuesta me funciono.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como saber que objeto fue pulsado

Publicado por Pollux (27 intervenciones) el 23/05/2008 20:20:03
Hola Crono:
Te comento que he echo eso que dices pero la verdad es que me da un error que no se de donde viene. El error lo señala en la clapsula Class en el procediemiento que acabo de declarar, en tu caso MyOnClick.
Este es el error:
Unsatisfied forward or external declaration: 'TForm1.MyOnClick'

A que se debe este error?
Espero que me contestes. Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como saber que objeto fue pulsado

Publicado por E.T. (1108 intervenciones) el 23/05/2008 23:19:52
Que tal Pollux, aqui te dejo la unidad completa de código, tal vez tu probema se que tu form no se llame TForm1, y tu calse sea otra, puedes checar el nombre de tu clase justo abajo de la sección type de la unidad, si te fijas bien, el procedimiento MyOnClick se declara como cualquier otro procedimiento de componente, para que se más sencillo declara el procedimiento, pero solo declaralo, justo como está arriba del click del botón, que sería esta linea

Procedure MyOnClick(Sender: TObject);

luego de que la escribas, presiona Control+Shift+C, esto hace que la estructura del procedimiento se cree, luego solo pones la linea de codigo que viene en dicho procedimiento, el resto solo lo pones en cualquier otro evento, yo lo puse al darle click a un botón, cualquier duda escribe

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Procedure MyOnClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.MyOnClick(Sender: TObject);
begin
ShowMessage((sender as TImage).name);
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin

for i:=1 to 5 do begin //Yo creo para el ejemplo 5 TImages
TImage.Create(self).Name:='Image'+inttostr(i);// Les asigno nombre, como tú
with TImage(FindComponent('Image'+inttostr(i))) do begin //Esta linea localiza el componente recié creado
Parent:=Form1;
Width:=75;
Height:=75;
Left:=75*(i-1)+(8*i);
Top:=50;
OnClick:=MyOnClick; //En esta linea se asigna el procedimiento que creamos, ojo sin parámetros, sino no funciona
Canvas.FillRect(rect(0,0,75,75));// Esta linea nos pinta el TImage para poder verlo
end;
end;
end;

end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar