Delphi - Crear componentes dinamicamente

 
Vista:

Crear componentes dinamicamente

Publicado por Izzy (2 intervenciones) el 13/09/2007 20:08:31
Buenas a todos, estoy haciendo un proyecto en lazarus y me encuentro con un problema, tengo un boton y, al hacer clic sobre el quiero que se cree un formulario nuevo, el codigo es el siguiente:



var

Form3:TForm;

txt:Tedit;

i:Integer;


Begin

Form3:=TFormCreate(Self);

Form3.Caption:="hola";

Form3.Show();

while(i<20)

begin

txt:=Tedit.Create(Form3);

txt.Caption:="Etiqueta";

txt.Show();

i:=i+1;

end;

End;


Este codigo esta en el evento onclick del boton, el caso es que al ejecutar y pinchar en el boton se me abre el nuevo formulario, pero no se me carga ningun campo de texto, ademas, dentro del while tb queria crear un boton y asignarle un evento a ese boton.


Un saludo y gracias de antemano
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
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

RE:Crear componentes dinamicamente

Publicado por E.T. (1244 intervenciones) el 13/09/2007 23:37:34
Le hice uno cambios al codigo que pones enseguida lo pongo, para esto debes de quitar del inicio la forma 3, de la siguiente manera (ve al menú project, luego a options y en la ventana que se muestra seleccionas la pestaña forms, donde dice auto-create forms quitas la forma 3) luego pones el siguiente codigo:

esto va en la unidad 1 o en la que llama a la forma 3 (la del botón)

procedure TForm1.Button1Click(Sender: TObject);
var txt:Tedit;
forma: TForm3;
i:Integer;
begin
Forma:=TForm3.Create(self);
Forma.Caption:='hola';
Forma.ShowModal;
Forma.Free;
end;

Los siguientes van en la forma 3

procedure TForm3.FormShow(Sender: TObject);
var i:integer;
begin
i:=1;
while(i<20) do begin
TEdit.Create(self).Name:='Edit'+inttostr(i);
with TEdit(FindComponent('Edit'+IntToStr(i))) do begin
Left:=10;
Top:=i*22;
Parent:=self;
Height:=21;
Width:=121;
text:='Etiqueta'
end;
inc(i);
end;
end;

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
var i:integer;
begin
i:=1;
while(i<20) do begin
with TEdit(FindComponent('Edit'+IntToStr(i))) do begin
destroy;
end;
inc(i);
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