Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Datos objeto (https://www.clubdelphi.com/foros/showthread.php?t=51168)

linuz 07-12-2007 13:34:02

Datos objeto
 
Hola a todos,

Estoy creando una aplicación donde creo paneles en tiempo de ejecución.

Código Delphi [-]
 
{public declarations}
 boton:TPanel;
.....
procedure TForm1.FormCreate(Sender: TObject);
var
i,j,k: integer;
  i := 0;
  j:= 1;
  k:= 0;
  while i <12 do
    begin
      i := i +1;
      boton := TPanel.Create(Self);
      boton.parent := Panel2;
      boton.left := 61;
      boton.Left := boton.Left* i;
      boton.Width := 60;
      boton.top :=  1;
      boton.Caption:= inttostr(i) + ':00';
      boton.OnClick := Clic;
end;
end;

procedure TForm1.clic(Sender: TObject);
begin
...
end;


Tengo una duda, y es que los objetos los crea bien, pero no se como poder hacer que cuando se haga clic sobre un objeto sepa que objeto ha sido, es decir, conocer su nombre, su caption, etc...


Muchas gracias.

Un saludo.

Caro 07-12-2007 13:57:09

Hola linuz, cuando creas cada panel puedes asignar la propiedad Tag a cada TPanel asi podras identificar sobre cual se hizo click y seria bueno que le dieras un nombre a cada Panel.

Código Delphi [-]

  while i <12 do
    begin
      i := i +1;
      boton := TPanel.Create(Self);
      boton.parent := Panel2;
      boton.Name := 'Boton'+IntToStr(i);
      boton.left := 61;
      boton.Left := boton.Left* i;
      boton.Width := 60;
      boton.top :=  1;
      boton.Caption:= inttostr(i) + ':00';
      boton.Tag := i;
      boton.OnClick := Clic;
     end;

.........

procedure TForm1.clic(Sender: TObject);
begin
 case TPanel(Sender).Tag of
  1: showmessage('Se ha presionado en '+TPanel(Sender).Name);
  2: showmessage('Se ha presionado en '+TPanel(Sender).Name);
  3: showmessage('Se ha presionado en '+TPanel(Sender).Name);
  4: showmessage('Se ha presionado en '+TPanel(Sender).Name);
  5: showmessage('Se ha presionado en '+TPanel(Sender).Name);
  ....
  ..... 
 end;
end;

saluditos

eduarcol 07-12-2007 13:57:13

El nombre no se lo estas aignando pero el caption si:

Código Delphi [-]
procedure TForm1.clic(Sender: TObject);
begin
if Sender is TPanel then
   ShowMessage(TPanel(Sender).Caption);
end;

Me gano CARO en velocidad ;)

Lepe 07-12-2007 14:50:48

Código Delphi [-]

procedure TForm1.clic(Sender: TObject);
begin
with TPanel(Sender) do 
 showmessage('Se ha presionado en '+TPanel(Sender).Name);
end;

En realidad no hace falta el .Tag, ya que el "Sender" es el propio botón donde se ha hecho clic.

Es un método ampliamente usado en Delphi. Si tienes un TEdit, en su evento OnClick el Sender es ese Edit en Cuestión, Si tienes un Form, en el evento OnClick, el parámetro Sender es ese Form.

Como en Delphi todo se basa en la Clase TObject (casi todo hereda de TObject), se puede pasar cualquier instancia de objeto (Tedit, Tbutton, Tpanel, TForm, etc) camuflado en el parámetro Sender.

Por definición: el Sender es el objeto que ha lanzado el evento.

Saludos

linuz 07-12-2007 16:07:26

Muchas gracias a todos por vuestra ayuda, ha funcionado a la perfección.
Os debo una cerveza o un vinito así que pasaros por la taberna que esta vez invito yo a una ronda.


Un saludo.


La franja horaria es GMT +2. Ahora son las 07:34:23.

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