PDA

Ver la Versión Completa : Perder el control de un componente creado en tiempo de ejecución


dec
30-06-2006, 13:35:56
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.


unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, // para el TButton
ExtCtrls; // para el TPanel

type

TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FPanel1,
FPanel2: TPanel;
procedure ButtonClick(Sender: TObject);
public
{ Public declarations }
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
// Creo el primer Panel
FPanel1:= TPanel.Create(Form1);
FPanel1.Parent:= Form1;
FPanel1.SetBounds(10, 10, 435, 150);
// Creo el segundo panel
FPanel2:= TPanel.Create(Form1);
FPanel2.Parent:= Form1;
FPanel2.SetBounds(10, 170, 435, 150);
// Creo la matriz de botones
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.