... ::: Como fazer pra deixar o aplicativo leve :: ...
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?
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
Curtidas 0
Respostas
Anonymous
14/02/2003
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
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
GOSTEI 0
Nildo
14/02/2003
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
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
GOSTEI 0
Garciabh2
14/02/2003
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?
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?
GOSTEI 0
Anonymous
14/02/2003
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
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
GOSTEI 0
Anonymous
14/02/2003
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
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
GOSTEI 0
Nildo
14/02/2003
Sim. voce tera que dar um create toda vez que mostrar o form.
GOSTEI 0
Fred
14/02/2003
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)
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)
GOSTEI 0
Nebrio
14/02/2003
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
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
GOSTEI 0
Garciabh2
14/02/2003
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)
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)
GOSTEI 0
Sandra
14/02/2003
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...
If Application.FindComponent(´F_Sobre´) = Nil Then
Application.CreateForm(TF_Sobre, F_Sobre) ;
Try
F_Sobre.ShowModal ;
Finally
F_Sobre.Free ;
End ;
Só isso...
GOSTEI 0
Espiridiao
14/02/2003
Gostei muito da vossa explicação, já agora como fazer para liberar a memoria de uma table/dataset...
Obrigado :wink:
Obrigado :wink:
GOSTEI 0
Garciabh2
14/02/2003
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
http://www.aspack.com
foi ótimo pra enxugar o exe
(reduziu o meu de 1.5Mb pra 500Kb !!!
fica menor na memoria
GOSTEI 0