He creado un control en tiempo de ejecución, pero no lo veo sobre el Form.
Al crear un control en tiempo de ejecución, ha de asignársele un dueño y un padre.
El dueño se asigna en el momento de la creación del control. Es el parámetro AOwner que se le pasa al constructor Create. Lo suyo es que el dueño del control sea el propio formulario donde va a estar el control. Así, no hay que preocuparse de destruir el
control cuando se destruya el formulario. Ya lo destruirá el propio formulario tal y como ocurriría si nuestro control se hubiese creado en tiempo de diseño. El padre es de tipo TWinControl. Así que puede ser un formulario, un Panel, un GroupBox, etc. Es el que indica
dónde se va a ver el control.
Para ayudarte a comprender todo esto, podemos probar estas líneas de código que nos podrían servir para hacer matrices de controles que quizás en tiempo de diseño resultaría un poco tedioso de realizar.
Comenzad con un proyecto nuevo.
Copiad todo lo que viene a continuación y pegadlo en Delphi, machacando todo lo que hubiese en la Unit1.
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FPanel1,
FPanel2: TPanel;
procedure ButtonClick(Sender: TObject);
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ButtonClick(Sender: TObject);
begin
if (Sender As TButton).Parent = FPanel1 then
(Sender As TButton).Parent:= FPanel2
else
(Sender As TButton).Parent:= FPanel1;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i, j: Integer;
begin
FPanel1:= TPanel.Create(Form1);
FPanel1.Parent:= Form1;
FPanel1.SetBounds(10, 10, 435, 150);
FPanel2:= TPanel.Create(Form1);
FPanel2.Parent:= Form1;
FPanel2.SetBounds(10, 170, 435, 150);
for i:= 0 to 4 do begin
for j:= 0 to 3 do begin
with TButton.Create(Form1) do begin
Parent:= FPanel1;
SetBounds(10+85*i, 10+35*j, 75, 25);
Caption:= 'Botón ' + IntToStr(j) + ', ' + IntToStr(i);
OnClick:= ButtonClick;
end;
end;
end;
end;
end.