Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   saber el nombre de un control creado en tiempo de ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=2415)

xxxlincexxx 22-07-2003 20:13:19

saber el nombre de un control creado en tiempo de ejecucion
 
hola a todos: tengo varios controles creados en tiempo de ejecucion, me preguntaba como puedo saber el nombre del mismo, o si en un momento dado delphi no le asigna alguno para poderle seguir la huella.

gracias de antemano.:D

__cadetill 22-07-2003 21:27:12

Hombre, se supone que creas el objeto asignandoselo a una variable de ese tipo para, como minimo, poder liberarlo despues, no? Pues solo tienes que acceder a esa variable

Código:


var MyVar : TImage;
.....

procedure TMyForm.Button1Click(Sender : TObject);
begin
  MyVar := TImage.Create(Self);
  MyVar.Parent := Panel1;
.....
end;

procedure TMyForm.Button2Click(Sender : TObject);
begin
  MyVar.Image := .....
end;

procedure TMyForm.Form1Close(Sender : TObject);
begin
  MyVar.Free;
end;

Espero te sirva

jachguate 23-07-2003 19:31:04

Si queres el "nombre" lo tenes aqui:

Código:

Var
  MiBoton : TButton;

Begin
  MiBoton := TButton.Create(self);
  MiBoton.Parent := Self;
  MiBoton.Caption := 'Hola!';
  ShowMessage('El nombre del botón es: ' + MiBoton.Name);
End;

Hasta luego.

;)

xxxlincexxx 25-07-2003 15:39:12

hola gracias por las respuestas, el problema que yo tengo es que cada vez que preciono un boton crea otro en tiempo de ejecucion y asi sucecivamente, puedo llegar a tener hasta 10 botonones pero todos tinene el mismo nombre como puedo hecer para crear la variable independiente para cada uno de ellos, y así cada boton sea independiete en tiempo de ejecucion, por eso preguntaba si delphi le asignaba algun nombre interno para no perderle la huella.:o

Ruben_Cu 25-07-2003 16:39:01

Hola xxxlincexxx, una aclaración, ¿todos los botones los creas a partir de hacer clic en el primero o haciendo clic en cada botón creado se crea el siguiente? Para mi es importante saberlo para tratar de ayudarte.
Saludos

delphi.com.ar 25-07-2003 16:43:59

O puedes cargarlos en un array / TList, o puedes utilizar su contenedor y/o dueño para acceder a estos.

Puedes ver las primeras respuestas de este hilo http://www.clubdelphi.com/foros/show...&threadid=2477


Saludos!

xxxlincexxx 27-07-2003 01:11:15

Gracias por estarme ayudando y les agradesco su paciencia esta es la parte de mi codigo:

var
boton:Array [0..x valor] of TBooton;
n:Integer;
begin
n:=n+1;
Boton[n]:=Tbooton.create;
broton[n].parent:=Self
boton[n].onclick:=otro procedimiento;
end;
de esta manera he creado en tiempo de ejecucion varios botones con un solo boton inicial; mi problema es como puedo reconocer sobre cual boton se llevo acabo el evento on click;
pero no tengo ni idea de como hacerlo; he pensado en recorrer cada uno de los sub indices de array, pero no encuentro manera de identificar cual fue el que recibio el evento.

:confused:

delphi.com.ar 27-07-2003 01:51:35

Puedes compararlo contra el Sender del evento, o bien utilizar directamente el Sender del evento para hacer lo que deseas!

Saludos!

andres1569 27-07-2003 07:48:11

Hola:

Puedes hacer varias cosas, como asignar el nombre del botón, nada más crearlo, o bien asignarle a su propiedad tag (que para este tipo de trucos está), el número de botón:
Código:

var
  boton : Array [0..x valor] of TBooton;
  n : Integer;
begin
  n := n+1;
  Boton[n] := TButton.create;
  Boton[n].parent := Self
  Boton[n].onclick := otro procedimiento;
// esto puede ser peligroso si ya hay otro con el mismo nombre
// aunque normalmente Delphi omite la T inicial del nombre
// de la clase y en nuestro caso la dejamos tal cual
  Boton[n].Name := TButton.ClassName + IntToStr(n);
// este truco es mejor, y más inmediato para identificarlo luego
  Boton[n].Tag := n + 1; // para que numere a partir de 1
end;

// cuando se hace click a un botón, si hemos usado Tag
procedure OtroProcedimiento (Sender: TObject);
begin
  Case TButton(Sender).Tag of
    1 : HazEsto;
    2 : HazLoOtro;
    ...
    end;
end;

ó bien

// cuando se hace click a un botón, si hemos usado Name
procedure OtroProcedimiento (Sender: TObject);
var
  s : String;
  N : Integer;
begin
  s := TButton(Sender).Name;              // Ej: s = 'TButton12'
  Delete (s, 1, Length(TButton.ClassName));  // Ej: s = '12'
  N := StrToInt(s);                      // Ej: N = 12
  Case N of
    0 : HazEsto;
    1 : HazLoOtro;
    ...
    end;
end;

Yo usaría la propiedad tag; lo de numerarla a partir de 1 es porque todos los componentes tienen tag = 0 por defecto, así lo diferenciamos, aunque es más bien una manía seguramente innecesaria, supongo que sólo los botones que crees en tiempo de ejecución accederán a ese procedimiento.

Majo 28-07-2003 00:23:09

Hola amigo

Acerca de si delphi coloca nombres a los componentes por defecto,.... te cuento que si lo hace, a menos que nosotros no se lo asignemos. Por ejemplo en el caso de los botones, delphi asigna así: button1, Button2,..... Button_n.

Para tus otras dudas el codigo siguiente seguro te va a servir...

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure ClickEnUnBoton(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
Incremento:Integer=0;

implementation

{$R *.DFM}

procedure TForm1.ClickEnUnBoton(Sender: TObject);
begin
with (Sender As TButton) do
Top:=Top+Height+10;
if (Sender As TButton).Top>100 then
with (Sender As TButton) do
Top:=10;

end;


procedure TForm1.FormCreate(Sender: TObject);
var
j: Integer;
begin
for j:= 0 to 5 do
begin
with TButton.Create(Form1) do
begin
Parent:=Form1;
Top:=10;
Left:=10+Incremento;
Incremento:=Incremento+Width+10;
Caption:='Botón'+IntToStr(j);
Name:='MiNombre'+IntToStr(j);
OnClick:= ClickEnUnBoton;
end;
end;
end;
end.

Seguro esto te ayudara en lo que necesitas, solo correlo y ya está


Suerte.....

xxxlincexxx 10-08-2003 23:45:54

Gracias: ya lo probe y funciono, sin su ayuda no lo hubiera logrado.


La franja horaria es GMT +2. Ahora son las 17:45:05.

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