Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Perder el control de un componente creado en tiempo de ejecución (https://www.clubdelphi.com/foros/showthread.php?t=80552)

dec 30-06-2006 13:35:56

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.


La franja horaria es GMT +2. Ahora son las 20:24:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi