Fórum Destruir componente com parent #271874
11/03/2005
0
Estou usando uma rotina para colocar dentro de um pagecontrol um tabshet com um formulário:
public
{ Public declarations }
t : ttabsheet;
...
begin
if t = nil then
begin
t := ttabsheet.Create(PageControl1);
t.Caption:= ´Usuários´;
t.PageControl := pagecontrol1;
with tform1.create(t) do
begin
borderstyle := bsnone;
align := alclient;
parent := t;
show;
pagecontrol1.ActivePage := t;
end;
end
else
begin
pagecontrol1.ActivePage := t;
end;
end;
A criação do form é feita corretamente e a nova aba é criada e apresenta o form em questão. Minha dúvida é para fechar o form e destruir essa nova aba criada. Coloquei um botão no form, mas não consegui fecha-lo se um Access violation...
Obrigado pela ajuda
Sanses
Sanses
Curtir tópico
+ 0Posts
11/03/2005
Massuda
A questão do Parent não deve influir nesse problema, já que o Parent está relacionado com a ordem de exibição dos objetos (quem é exibido em cima de quem).
Gostei + 0
11/03/2005
E_gama
no clique do botão pode simplesmente colocar:
Parent.Free;
Pois, quando vc destroy um objeto, todos os objetos ´child´ também são destruídos...
Gostei + 0
11/03/2005
Sanses
Nas duas dicas acima, continua dando erro de aceess violation, porém na dica do e_game, o tabshet em questão é realmente destruído ficando só o que é criado na criação do form principal. Já na dica do Massuda, ele me fecha todo o page control, e preciso que ele feche apenas o tabshet criado com o formulário em questão.
Obrigado pela ajuda
Sanses
Gostei + 0
11/03/2005
Massuda
Nesse caso, antes de destruir a tabsheet, você está ajustando pagecontrol.activepage para um outra página que não seja a que vai ser destruída?
Gostei + 0
11/03/2005
Sanses
Tentei assim agora, mas tb não consegui:
frmprincipal.PageControl1.ActivePageindex:= 0; frmprincipal.t.Free; frmprincipal.t:=nil;
dá erro de access violation, mesmo jogando o foco para a aba principal que não está sendo destruida e é criada junto com a aplicação.
Obrigado pelo empenho
Sanses
Gostei + 0
11/03/2005
Sanses
Gostei + 0
11/03/2005
Massuda
type TForm1 = class(TForm) ... private Tab: TTabSheet; ... // botão para criar a tabsheet procedure TForm1.Novo1Click(Sender: TObject); begin if Tab = nil then begin Tab := TTabSheet.Create(PageControl1); Tab.Caption := ´Teste´; Tab.PageControl := PageControl1; with TForm2.Create(Tab) do begin Parent := Tab; BorderStyle := bsNone; Align := alClient; Show; end; end; PageControl1.ActivePage := Tab; end; // botão para destruir a tabsheet procedure TForm1.Destruir1Click(Sender: TObject); begin if Tab <> nil then begin PageControl1.ActivePageIndex := 0; FreeAndNil(Tab); end; end;
Não tenho idéia do que pode estar acontecendo com você.
Gostei + 0
12/03/2005
Sanses
:( :(
Gostei + 0
14/03/2005
Sanses
no button1
novoform( [b:b6b43f43e9]form[/b:b6b43f43e9])
button2
novoform( [b:b6b43f43e9]form1[/b:b6b43f43e9])
e a função seria assim
function Novoform(form : tform);
begin
if Tab = nil then begin
Tab := TTabSheet.Create(PageControl1);
Tab.Caption := ´Teste´;
Tab.PageControl := PageControl1;
with [b:b6b43f43e9]Form[/b:b6b43f43e9].Create(Tab) do begin
Parent := Tab;
BorderStyle := bsNone;
Align := alClient;
Show;
end;
end;
PageControl1.ActivePage := Tab;
end;
Sanses
Gostei + 0
15/03/2005
Sanses
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)