Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-07-2003
xxxlincexxx xxxlincexxx is offline
Miembro
 
Registrado: jun 2003
Posts: 10
Poder: 0
xxxlincexxx Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 22-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 23-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 25-07-2003
xxxlincexxx xxxlincexxx is offline
Miembro
 
Registrado: jun 2003
Posts: 10
Poder: 0
xxxlincexxx Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 25-07-2003
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 25-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 27-07-2003
xxxlincexxx xxxlincexxx is offline
Miembro
 
Registrado: jun 2003
Posts: 10
Poder: 0
xxxlincexxx Va por buen camino
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.


Última edición por xxxlincexxx fecha: 27-07-2003 a las 01:27:48.
Responder Con Cita
  #8  
Antiguo 27-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Puedes compararlo contra el Sender del evento, o bien utilizar directamente el Sender del evento para hacer lo que deseas!

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 27-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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.
__________________
Guía de Estilo

Última edición por andres1569 fecha: 27-07-2003 a las 07:50:39.
Responder Con Cita
  #10  
Antiguo 28-07-2003
Majo Majo is offline
Miembro
 
Registrado: jun 2003
Posts: 43
Poder: 0
Majo Va por buen camino
Cool

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.....

Última edición por Majo fecha: 28-07-2003 a las 00:32:10.
Responder Con Cita
  #11  
Antiguo 10-08-2003
xxxlincexxx xxxlincexxx is offline
Miembro
 
Registrado: jun 2003
Posts: 10
Poder: 0
xxxlincexxx Va por buen camino
Smile

Gracias: ya lo probe y funciono, sin su ayuda no lo hubiera logrado.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:59:02.


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
Copyright 1996-2007 Club Delphi