Fórum destruir form #190197

22/10/2003

0

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 ?


Pithon

Pithon

Responder

Posts

22/10/2003

Eduardo Pereira

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


Responder

Gostei + 0

22/10/2003

Pithon

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 ?


Responder

Gostei + 0

23/10/2003

Raserafim

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]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar