... ::: Como fazer pra deixar o aplicativo leve :: ...

14/02/2003

0

quero saber o seguinte:

pro meu programa nao ficar cheio de coisa carregada na memoria, quero saber quando uso essas coisas:

Form1.Show e Form1.Showmodal (qual é a diferenca?)

pra que serve e onde uso:
Form1.Free
Form1.close
(qual libera o form da memoria?)

que mais tem pra liberar os trem?


Garciabh2

Garciabh2

Responder

Posts

14/02/2003

Anonymous

Olá...
Faça o seguinte, na propriedade do Form, procure no Events OnClose e coloque a linha de comando para todas as janelas.
Action := cafree;

Antes de você dar um showmodal, nas telas, faça:
Update;
Form1 := TForm1.Create(Self)
Form1.showmodal;

O showmodal, impede que vc acesse alguma janela em segundo plano.
No menu Project do Delphi, Options, deixe somente sua forma principal como Auto-Create Forms, as demais, deixe como Avaliable Form.

Isso melhora em 40¬ a velocidade.
Espero ter ajudado
Abraços
Carlão
carlao@sulbrasil.com.br


Responder

14/02/2003

Nildo

Se voce esta no form1, e coloca um form2.showmodal, ele para completamente a execucao do form1, mostra o form2 e o form1 soh volta a funcionar quando o form2 for fechado.

O form1.close apenas fecha o form
o form2.free libera ele da memorio. Quando o free é chamado, voce tem que dar outro .create para mostrar denovo


Responder

14/02/2003

Garciabh2

Carlao,

testei o Action := cafree;
no OnClose do Form2, mas deu uns pau feio

a ideia de colocar os forms como available pareceu ótima! até abriu mais rapido o programa, mas quando fui abrir um form2 pelo menu deu uns access violation feioso aqui... ao inves de Form2.showmodal tenho que usar Form2.create?

será que faltou algo?

A ideia do Bart Ninja tb foi boa! só uma duvida: compensa dar um Free no form pra depois ter que dar um Create de novo?


Responder

14/02/2003

Anonymous

Se vc. estiver fazendo referência a ele em outro formulário vai ter que ´zerar´essa referência. E testar ao criar tb.
Exemplo:
no Close do form, depois do caFree:
TFormASerFechado.close()
begin
Action:=caFree;
Frm_Principal.FormASerFechado:=nil;
end;


TFrm_Principal.CriarFormASerFechado_ActExecute;
begin
if not assigned(FormASerFechado) then
FormASerFechado:=tFormASerFechado.Create(self);
FormASerFechado.Show;
end;

E por aí vai...
sohad@ig.com.br


Responder

14/02/2003

Anonymous

O detalhe é o seguinte.
Quando vc usar o Action := cafree;
será sempre necessário que vc crie a forma novamente, no menu que vc está fazendo,

Form1 := TForm1.Create(Self);

Esse comando Action, ele libera de vez a tela e todos os recursos usados por ela da memória.

Qualquer coisa, me mande um mail.

carlao@sulbrasil.com.br


Responder

14/02/2003

Nildo

Sim. voce tera que dar um create toda vez que mostrar o form.


Responder

14/02/2003

Fred

Será que ninguem sabe nada...

Faça o Seguinte na hora de chamar o form digite

if formaserchamado = nil then //se nao estiver criado entao crie
formaserchamado := tformaserchamado.create(self);
formaserchamado.show; ou showmodal

No evento onclose deste formaserchamado digite:

action := cafree;
formaserchamado := nil;

Só isso!!! 8)


Responder

14/02/2003

Nebrio

kra faça assim:

Para criar o form faça:

Form := TForm.Create(self);
Form.ShowMoal;

No Evento OnClose do Form faça:

Action := CaFree;
Form := Nil;

No Evento OnDestroy faça:

Form := Nil;

Form = ao nome do seu Form

Nébrio

Avise se funcionar


Responder

14/02/2003

Garciabh2

Nebrio, Nildo, Carlao e Sohad, brigadao pela resposta!!

fui tentando aqui e funcionou o que o Fred disse
fiz do jeitim que ele falou e nao deu pau (tava acontecendo de ele abrir o form uma vez, mas quando fechava e pedia pra abrir de novo dava pau)

aí peguei mais o que o Carlao sugeriu de colocar os forms secundarios todos em Available (ao inves de AutoCreate) nas opcoes do projeto e a abertura tambem ficou muito mais rapida.

acho que deu pra gente dar uma esclarecida de como fazer ficar mais leve (inclusive os que acessaram querendo saber mais sobre isso)


Responder

15/02/2003

Sandra

Gente, eu conheço de outro jeito, parecido com a dica do Fred. É assim, por exemplo, do form principal e acessar o form sobre (F_Sobre), através de um click em um botão ou item de menu :

If Application.FindComponent(´F_Sobre´) = Nil Then
Application.CreateForm(TF_Sobre, F_Sobre) ;
Try
F_Sobre.ShowModal ;
Finally
F_Sobre.Free ;
End ;


Só isso...


Responder

15/02/2003

Espiridiao

Gostei muito da vossa explicação, já agora como fazer para liberar a memoria de uma table/dataset...

Obrigado :wink:


Responder

17/02/2003

Garciabh2

além disso tudo, pegar o ASPack
http://www.aspack.com
foi ótimo pra enxugar o exe
(reduziu o meu de 1.5Mb pra 500Kb !!!
fica menor na memoria


Responder

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

Aceitar