Ajuda... Estouro de recursos

Delphi

22/05/2003

Olá...
Estou Criando um novo projeto e somente ao desenhar as telas já está dando problema de falta de recursos (Acompanhei pelo medidor de recursos do windows e realmente é este o problema). Estou utilisando frames, DBEdit, StaticText e PageControl. O número de DBEdit e StaticText é rasoávelmente grande e alguns frames tem em seu interior outros frames. Não há nenhuma programação por trás dos componentes pois só estou desenhando as telas no momento. Quanto ao equipamento que estou usando, trata-se de um Pentium III 750, 256MB de RAM e muito espaço no HD.
Por favor, ficarei grato por qualquer possível solução.

Desde já, obrigado.


Joaomw

Joaomw

Curtidas 0

Respostas

Marconi

Marconi

22/05/2003

Olá... Estou Criando um novo projeto e somente ao desenhar as telas já está dando problema de falta de recursos (Acompanhei pelo medidor de recursos do windows e realmente é este o problema). Estou utilisando frames, DBEdit, StaticText e PageControl. O número de DBEdit e StaticText é rasoávelmente grande e alguns frames tem em seu interior outros frames. Não há nenhuma programação por trás dos componentes pois só estou desenhando as telas no momento. Quanto ao equipamento que estou usando, trata-se de um Pentium III 750, 256MB de RAM e muito espaço no HD. Por favor, ficarei grato por qualquer possível solução. Desde já, obrigado.


Estouro de recursos, quer dizer que não há memória suficiente para continuar o programa.
Veja quais programas estão carregados nela, e que voce não vai precisar e tente tirar. Antivirus, gators, etc sempre causam isto.
Este problema normalmene acontece quando voce tenta compilar um programa que tem muitas telas e elas são muito carregadas.
Para solucionar isto devemos evitar que sejam auto criadas. Voce pode controlar isto no menu Project->Options->Forms->Auto-create forms. Na lista da esquerda deixe somente o form principal da sua aplicação. Os outros deixe em Avaliable forms.
Cada vez que precisar abrir um form voce deve cria-lo antes:

....
Application.CreateForm(TForm2.form2); // criando o form que preciso.
form1.hide; // escondendo o principal
form2.showModal; // utilizando o form2
form2.free; // livrando a memória do form2
form1.show; // voltando ao principal, quando o form2 for fechado.
Estas duas últimas linhas podem ser invertidas, tanto faz.

O ideal neste caso seria não trabalhar com datamodules, colocondo em cada form as tabelas que ele vai precisar.

Quando todos os forms estão criados, cada vez que voce atualiza ou navega em uma tabela, todos os objetos de todos os forms que estão ligados a ela, também são atualizados, mesmo que não estejam sendo mostrados na tela no momento. Por isto quando voce cria e apaga os forms a medida que utiliza ou não, acaba ganhando espaço na memória e velocidade no processamento.

Espero ter entendido e ajudado.

Marconi


GOSTEI 0
Joaomw

Joaomw

22/05/2003

Mas no caso eu não estou utilizando forms, e sim frames. Está organizado da seguinte maneira
FormPrincipal
frame1
frame11
frame12
frame13
frame2
frame21
frame22
frame3
frame31
frame32
frame33
frame4

Teria alguma maneira para eu utilizar forms como estou utilizando os frame sem desabilitar o nível inferior/superior mantendo-se sempre na frente do form que o chamou para que eu possa utilisar sua solução sem me desfazer da minha estrutura?

Novamente, obrigado.


GOSTEI 0
Marconi

Marconi

22/05/2003

Os frames devem estar definidos no arquivo de extensão dfm, neste caso voce deveria desativar as linhas da definição e usa-las no form principal criando e apagando da memória em runtime.
Isto complica muito a manutenção, porque voce não vai enxergar o frame durante a criação.

Outra maneira seria transformar seus frames em objetos ou joga-los em uma dll. Nos dois casos vai cumplicar a manutenção.

Nunca tentei, mas estou pensando agora, se voce criasse os frames em forms diferentes, deixando em sua aplicação apenas frames vazios. Bastaria copiar o conteúdo do outro frame antes da apresentação. Os outros forms voce não abriria, apenas criava em tempo real para copiar o conteúdo dos frames, ou bastaria eles estarem na cláusula USES do seu form principal para serem acessiveis, sem jamais serem mostrados.

Devo parabeniza-lo, programas com frames ficam mais bonitos. Vou pensar em fazer algum no futuro.

Espero ter ajudado.

Marconi


GOSTEI 0
POSTAR