destruir form
Quando um programa tem muitos forms, qual seria o procedimrto correto ? Destruir sempre que ele não tiver o foco ou deixar ele residir em memoria ?
Em caso de se distruir o form, qual é a ação a ser vinculada ?
Em caso de se distruir o form, qual é a ação a ser vinculada ?
Pithon
Curtidas 0
Respostas
Eduardo Pereira
22/10/2003
O ideal é deixar sempre instanciado os forms mais usados (poucos), como o form principal da aplicação e criar e destruir todos os outros, a medida que são usados.
Poderia ser feito assim:
...
var
frmCadastro: TfrmCadastro;
begin
frmCadastro:= TfrmCadastro.Create(Application);
....
frmCadastro.ShowModal; // ou .Show
....
frmCadastro.Free;
end;
Esta rotina poderia estar no form chamador (no evento OnClick de um botão), ou dentro do própria unit do form a ser criado, em uma rotina chamada, por exemplo, AbreCadastro. Desta forma o form de cadastro pode ser chamado de qualquer outro ponto do programa com mais facilidade.
Lembre-se que é necessário retirar o form do auto-create, nas opções do projeto.
[]´
Eduardo Pereira
Poderia ser feito assim:
...
var
frmCadastro: TfrmCadastro;
begin
frmCadastro:= TfrmCadastro.Create(Application);
....
frmCadastro.ShowModal; // ou .Show
....
frmCadastro.Free;
end;
Esta rotina poderia estar no form chamador (no evento OnClick de um botão), ou dentro do própria unit do form a ser criado, em uma rotina chamada, por exemplo, AbreCadastro. Desta forma o form de cadastro pode ser chamado de qualquer outro ponto do programa com mais facilidade.
Lembre-se que é necessário retirar o form do auto-create, nas opções do projeto.
[]´
Eduardo Pereira
GOSTEI 0
Pithon
22/10/2003
Ok, obrigado pela dica. Vou testar. Mas o form a ser destruido não deve ser somente apos o novo formulário ter sido aberto e estar finalizado. Neste caso qual seria o evento que dispararia o destruição de un form que perde o foco ?
GOSTEI 0
Raserafim
22/10/2003
Na minha opinião é o seguinte: se você quer que a aplicação abra muito rápido então o ideal é carregar todos os forms na medida em que eles são utilizados, e para isto você terá que ir em Project>Option e na guia Forms, e passar todos os forms, com exceção do principal, para Available forms, de modo que eles não sejam criados na inicialização da aplicação.
Mas se você prefere que a abertura da aplicação seja um pouco mais lenta mas em compensação a abertura dos forms seja mais rápida, então deixe os forms serem criados na inicialização da aplicação.
Um meio termo seria deixar o delphi carregar na inicialização os forms que serão mais utilizados e os outros sendo criados e destruidos no momento em que são utilizados. Para isto faça o seguinte:
no comando que vai chamar o form, primeiro crie-o com o comando
[b:0b56172d8c]Application.CreateForm(TFrmFuncionarios, FrmFuncionarios);[/b:0b56172d8c]
onde o primeiro parâmetro é a classe do form e o segundo é o nome do form. E depois chame o método Shjow ou ShowModal.
[b:0b56172d8c] FrmFuncionarios.Show;[/b:0b56172d8c]
E para que o form seja destruido quando for fechado, no evento [b:0b56172d8c]OnClose[/b:0b56172d8c] coloque [b:0b56172d8c]Action := caFree;[/b:0b56172d8c]
Mas se você prefere que a abertura da aplicação seja um pouco mais lenta mas em compensação a abertura dos forms seja mais rápida, então deixe os forms serem criados na inicialização da aplicação.
Um meio termo seria deixar o delphi carregar na inicialização os forms que serão mais utilizados e os outros sendo criados e destruidos no momento em que são utilizados. Para isto faça o seguinte:
no comando que vai chamar o form, primeiro crie-o com o comando
[b:0b56172d8c]Application.CreateForm(TFrmFuncionarios, FrmFuncionarios);[/b:0b56172d8c]
onde o primeiro parâmetro é a classe do form e o segundo é o nome do form. E depois chame o método Shjow ou ShowModal.
[b:0b56172d8c] FrmFuncionarios.Show;[/b:0b56172d8c]
E para que o form seja destruido quando for fechado, no evento [b:0b56172d8c]OnClose[/b:0b56172d8c] coloque [b:0b56172d8c]Action := caFree;[/b:0b56172d8c]
GOSTEI 0