Série da semana: Primeiros passos no React

Veja mais

Destruir um Panel

22/02/2016

1

Ola Pessoal... tenho um form e com um Botão crio um panel e dentro desse panel eu crio button, DBGrid, DBEdit, etc...até ai tudo ok.
O problema esta quando quero voltar FORM na forma original ou seja "destruir" o panel . obs. criei um BitBtn dentro do panel e no evento onclick do BitBtn ja coloquei :panel.free; ou panel.destroy o problema é que dá um erro... mais o panel some

procedure TFormTransbordo.SAIR(sender:TObject);
begin
Panel_Transbordo.FREE;
end;

PROCEDURE TFormTransbordo.transbordo1Clic (sender:TObject);
begin
Panel_Transbordo:=TPanel.Create(Application);
try
Panel_Transbordo.Parent:=FormTransbordo;
Panel_Transbordo.Top:=0;
Panel_Transbordo.Left:=0;
Panel_Transbordo.Height:=649;
Panel_Transbordo.Width:=700;

BT_SAIR:=TBitBtn.Create(Panel_Transbordo);
with BT_SAIR do
begin
Parent:=Panel_Transbordo;
Top:=85;
Left:=950;
Height:=520;
Width:=100;
OnClick:=SAIR
end;
FINALLY
end; end;

Então pessoal alguém sabe o que eu estou fazendo de Errado...
Responder

Posts

23/02/2016

Mateus Ribeiro

Bom dia! Experimenta: FeeAndNill(Panel1);
Responder

23/02/2016

Rafael Bosco

No momento da criação do panel você está jogando como Owner dele a Aplicação, sugiro alterar para NIL :

   Panel_Transbordo:=TPanel.Create(nil);


Posteriormente faça da seguinte forma:

procedure DestroyPanel(const Form: TForm; const NamePanel: String);
var
 Component: System.Classes.TComponent;
begin
  for Component in Form do
  begin
    if (Component is TPanel) then
    begin
      if (TPanel(Component).Name = NamePanel) then
      begin
        TPanel(Component).Free; // Qualquer coisa, teste usando o Destroy e/ou FreeAndNil;
        System.Break;
      end;
    end;
  end;
end;



Depois só jogar essa procedure dentro do evento do botão que você criou, ficando assim:

   procedure TFormTransbordo.SAIR(Sender: TObject);
   begin
      DestroyPanel(Self, 'Panel_Transbordo');
   end;    
Responder