Ver Mensaje Individual
  #1  
Antiguo 30-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Perder el control de un componente creado en tiempo de ejecución

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, // 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.
Responder Con Cita