FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
|||
|
|||
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; |
#3
|
||||
|
||||
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;
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#4
|
|||
|
|||
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.
|
#5
|
|||
|
|||
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 |
#6
|
||||
|
||||
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. |
#7
|
|||
|
|||
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. |
#8
|
||||
|
||||
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. |
#9
|
|||
|
|||
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;
__________________
Guía de Estilo Última edición por andres1569 fecha: 27-07-2003 a las 07:50:39. |
#10
|
|||
|
|||
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. |
#11
|
|||
|
|||
Gracias: ya lo probe y funciono, sin su ayuda no lo hubiera logrado.
|
|
|
|