Fórum Errroo Impresssionante ..... #204717
07/01/2004
0
Tô com um problema impressionante acontecendo com um form MdiChild. É o 1º caso destes q estou tendo.
Tenho um Form1 que é chamado a apartir do menu:
if not assigned(form1)then
form1 := tform1.create(application);
aí ele abre certinho e mostra tudo o q preciso.
Agora se eu fechar este form1 e tentar abrí-lo de novo ele dá erro no evento OnChange de um PageControl. O Impressionante de tudo isso é q na 1ª vez q abro o form NÃO DÁ ERRO, agora se eu fechar e abrí-lo novamente DÁ ERRO, INCRÍVEL ... ME AJUDEM !!!!!
no Form1.Onclose: (achei q isso destruiria tudo)
Action := CaFree;
Form1 := nil;
ajudem ..obrigado
Diogo
Diogoalles
Curtir tópico
+ 0Posts
07/01/2004
Luizfernando777
Gostei + 0
07/01/2004
Diogoalles
mas como eu já disse, na primeira vez q abro a tela ñ dá erro nenhum, aogra se eu fechar o form e abrir de novo dá erro ... Impressionante ..to indignado !!
eu sei q seria simples, pegar e tirar a rotina do Setfocus, mas ñ posso acreditar q na primeira vez q abre o form está tudo ok, e se depois eu fechar e abrir de novo dá erro ..
Valeuuu
abraço
Gostei + 0
07/01/2004
Luizfernando777
luizfernando777@yahoo.com.br
Gostei + 0
07/01/2004
Cabelo
Sem mais
Cabelo
Gostei + 0
07/01/2004
Diogoalles
Como eu faço pra verificar se está na memoria ?
abraço
Gostei + 0
07/01/2004
Cabelo
var i:integer;
begin
if (TForm(reference) <> nil) then
for i := 0 to Application.MainForm.MDIChildCount-1 do
begin
if Application.MainForm.MDIChildren[i] = TForm(reference) then
begin
if TForm(reference).Windowstate = wsMinimized then
TForm(reference).Windowstate := wsNormal
else
TForm(reference).BringToFront;
exit;
end;
end ;
Application.CreateForm(TfrmClass, TForm(reference));
end;
Utilize esta função e vê se dá certo, coloque ela no lugar em que vc carrega a variável form1.
Cabelo
Gostei + 0
01/02/2004
Ildefonso
Vi sua mensagem apenas hoje e pensei o seguinte:
...no OnClose, o Delphi ainda não destruiu o Form1. Talvez a classe volte a usar a variável em seus procedimentos depois do evento.
Em meus forms MDIChild eu uso uma variável privada para os abrir:
procedure TMestre.OpenChild; var newF: TFilho; begin Application.CreateForm(TFilho, newF); end;
No [b:5a71496fe9]OnClose[/b:5a71496fe9] do TFilho, uso normalmente o [b:5a71496fe9]Action := caFree;[/b:5a71496fe9] e, em relação à destruição deste objeto, [u:5a71496fe9]mais nada[/u:5a71496fe9].
A vantagem desta abordagem é que eu posso criar vários formulários filhos a partir de um mesmo tipo, todos funcionarão independentes, sem problemas.
Como a variável é local (a [b:5a71496fe9]newF[/b:5a71496fe9]) o Delphi deve saber tratar o tipo TPersistente, do qual o TForm é baseado, para manipular o objeto sem um nome de variável específico.
Bom trabalho. 8)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)