Fórum Liberar forms da memória de dentro de um painel #332334

30/10/2006

0

Pessoal, eu precisei abrir uns forms dentro de um Panel.
Usei isso pra executar:

  Form1.Parent := Painel;
  Form1.Show;


OK. Eu fecho e chamo os outros tudo blz, só que aprendi uma vez que para liberar os forms da memória tem que colocar no Onclose esse lance:

Action:= caFree;


Só que quando eu coloco isso nos forms que serão abertos dentro do Panel dah um erro quando eu tento fechá-los.

Posso deixá-los sem isso, ou tem outra maneira de liberá-los ?


Laelsonc

Laelsonc

Responder

Posts

30/10/2006

Pestana

Qua a mensagem do erro que está apareçendo? você está criando o Form1 em tempo de execução?


Responder

Gostei + 0

30/10/2006

Laelsonc

O form ja esta criado. Estou so chamando ele com o código acima no botão.
O lance é que agora nem mais tah abrindo dentro do Panel. tah dando o seguinte erro:

Access violation at address 00585D63 in module ´projeto.exe´. Read of address 00000000´. Process stopped...


Nem sei o que fiz, pra dar essa exceção agora...

Me ajudem ai galera ! Qual o jeito mai seguro e funcional de colocar um form dentro de um Panel ??!!!!


Responder

Gostei + 0

30/10/2006

Pestana

laelsonc,

vai no menu Project > View Source e verifique se comtem a linha abaixo:

Application.CreateForm(TForm1, Form1);

caso sim, então o sistema está criando automaticamente o form, quando cria o form automaticamente não se pode destroir ´Action:= caFree´,
voce so utiliza o comando para destruir quando se cria manualmente o form.

alguns exemplos para se criar forms manualmente:

Form := TForm.Create(nil);
Form := TForm.Create(Self);
Form := TForm.Create(Application);
Application.CreateForm(TForm, Form);

depois voce vai no menu project > options > na aba forms retire da caixa Auto-create forms e repasse para a caixa Avaliable forms


qualquer coisa é so postar.


Responder

Gostei + 0

30/10/2006

Laelsonc

Valeu amigo Pestana. Estão abrindo agora blz dentro do Panel. Só que agora surgiram outras preocupações.

O Form dentro do Panel parece não ficar ativado, apesar de eu conseguir arrastá-lo por entre os limites do Panel. Um edit por exemplo, não consigo focar ele clicando encima. Tive que colocar um setfocus no onclick para isso. Mesmo assim não consigio selecionar o texto de um memo ou Edit com o mouse.

Alguem sabe como resolver essa ?


Responder

Gostei + 0

30/10/2006

Laelsonc

Pessoal descobri porq não conseguia selecionar os elementos. Só foi alterar para o align para alClient do form que ficava dentro do Panel que resolveu. Valeu.


Responder

Gostei + 0

30/10/2006

Pestana

que bom que deu certo.

qualquer problema é so postar.


flw.


Responder

Gostei + 0

31/10/2006

Nery

Olá a todos!
como faço para verificar sem um form já esta criando

desde já agradeço


Responder

Gostei + 0

31/10/2006

Pestana

Nery,

eu uso assim:
if form = NIL then //se o form não está criado então ele vai ser igual a nil
cria o form...
else // senão ele ja está criado, ai é só chamar.
form.show;


flw.


Responder

Gostei + 0

01/11/2006

Marco Salles

if form = NIL then //se o form não está criado então ele vai ser igual a nil cria o form... else // senão ele ja está criado, ai é só chamar. form.show;


para que isto funcione corretamente , acredito que na destruição do form .
voce deve especificar explicitamente que o FormCriado :=Nil..
Claro que métodos como FreeandNil() , alem de liberar um objeto , configura o ponteiro desse objeto para nil.. Porém este método não é o mais aconselhável para destruição de forms

Assim na hora de destrir faça:

FormCriado.Release; FormCriado:=Nil



Responder

Gostei + 0

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

Aceitar