Fórum Identificar se o frame foi criado dinamicamente #411215
04/01/2012
0
No form que criei inseri um PageControl e nele crio dinamicamente as Tabs. Quando crio uma Tab chamo um frame já existente porém não declarado no Type da classe TForm (tudo funciona normal).
O problema ocorre se o botão que chama o frame for clicado 2x, pois o objeto já criado não pode ser aberto novamente.
Pergunta: Se o frame não está declarado no TForm como faço para identificar se ele já está criado ?
Código:
procedure Tfrm_Principal.Action11Execute(Sender: TObject); begin //cria o Formulário Principal Application.CreateForm(Tfrm_Principal, frm_Principal); //cria o TabSheet TabSheet := TTabSheet.Create(PageControl1); TabSheet.PageControl := PageControl1; TabSheet.Caption := Pessoas; //Carrega o frame no tab criado Frame := Tfra_Pessoa.Create(self); Frame.Parent := tabSheet; Frame.Align := alClient; end;
Lucas Barbeiro
Curtir tópico
+ 0Posts
05/01/2012
Alan Souza
procedure Tfrm_Principal.Action11Execute(Sender: TObject);
begin
//cria o Formulário Principal
Application.CreateForm(Tfrm_Principal, frm_Principal);
//cria o TabSheet
TabSheet := TTabSheet.Create(PageControl1);
TabSheet.PageControl := PageControl1;
TabSheet.Caption := Pessoas;
//Carrega o frame no tab criado
if not Assigned(Frame) then
begin
Frame := Tfra_Pessoa.Create(self);
Frame.Parent := tabSheet;
Frame.Align := alClient;
end;
end;
Gostei + 0
06/01/2012
Lucas Barbeiro
Da forma que você sugeriu o frame só abre no primeiro tab, está ok. Mas ai continua a criar as tabs (Pessoas) vazias (sem o frame).
Preciso verificar se o objeto (tabsheet e/ou frame) foi criado pelo nome, assim não acontecerá o erro.
Abs
Gostei + 0
06/01/2012
Alan Souza
pode também ser feito uma lista de objetos com os frames criados, um para cada aba.
Gostei + 0
06/01/2012
Alan Souza
procedure Tfrm_Principal.Action11Execute(Sender: TObject); begin Application.CreateForm(Tfrm_Principal, frm_Principal); TabSheet := TTabSheet.Create(PageControl1); TabSheet.PageControl := PageControl1; TabSheet.Caption := Pessoas; with Tfra_Pessoa.Create(self) do begin Parent := tabSheet; Align := alClient; end; end;
não posso testar agora, mas costumo usar assim às vezes.
Gostei + 0
06/01/2012
Lucas Barbeiro
A segunda está idêntica ao código que iniciei :)
Vlw
Gostei + 0
07/01/2012
Lucas Barbeiro
Ainda não consegui... :(
Gostei + 0
08/01/2012
Lucas Barbeiro
Desenvolvi 2 soluções para o meu caso:
1 - utilizar a função
FindComponent(Nome do componente);
2 - desabilitar o botão logo após a chamada do tabsheet/frame
Essa segunda é mais simples, prática e eficiente.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)