Form MDI não aparece
Oi pessoal,
Estou com um pequeno problema, criei meu form e configurei da seguinte forma:
FORM PAI
FormStyle := fsMDIForm;
FORM FILHO
FormStyle := fsMDIChild;
Rotina utilizada para chamar Form Filho
If Entrada_Tipo_Cliente=Nil Then
Application.CreateForm(TEntrada_Tipo_Cliente, Entrada_Tipo_Cliente);
Entrada_Tipo_Cliente.Show;
O que acontece com ele é que ele simplesmente não mostra o form, ele abre, mas não mostra, como se estivesse Visible:=False, mas não está.
Obg,
Junior
Estou com um pequeno problema, criei meu form e configurei da seguinte forma:
FORM PAI
FormStyle := fsMDIForm;
FORM FILHO
FormStyle := fsMDIChild;
Rotina utilizada para chamar Form Filho
If Entrada_Tipo_Cliente=Nil Then
Application.CreateForm(TEntrada_Tipo_Cliente, Entrada_Tipo_Cliente);
Entrada_Tipo_Cliente.Show;
O que acontece com ele é que ele simplesmente não mostra o form, ele abre, mas não mostra, como se estivesse Visible:=False, mas não está.
Obg,
Junior
Araujojunior
Curtidas 0
Respostas
Massuda
21/06/2005
Normalmente, o form filho é criado a partir do form pai usando algo assim:O Show nem é necessário porque, sendo um form fsMDIChild, a VCL/Windows se encarrega de exibir o form.
Entretanto, testei o código que você postou e comigo funcionou OK.
Note que como você está usando uma variável (Entrada_Tipo_Cliente) para testar se o form já foi criado, pode ser que você esteja esquecendo de nil´zar essa variável no OnClose/OnDestroy do form filho.
Existem outras formas de testar se o form já existe sem precisar da variável. Por exemplo, antes de criar o form você pode testar se existe um form da mesma classe na lista MDIChild mantida pelo form pai.
Entrada_Tipo_Cliente := TEntrada_Tipo_Cliente.Create(Self);
Entretanto, testei o código que você postou e comigo funcionou OK.
Note que como você está usando uma variável (Entrada_Tipo_Cliente) para testar se o form já foi criado, pode ser que você esteja esquecendo de nil´zar essa variável no OnClose/OnDestroy do form filho.
Existem outras formas de testar se o form já existe sem precisar da variável. Por exemplo, antes de criar o form você pode testar se existe um form da mesma classe na lista MDIChild mantida pelo form pai.
GOSTEI 0
Araujojunior
21/06/2005
Sei que os códigos citados são certos, pois já tentei das 2 formas, esqueci de falar que utilizo o método e hereditariedade, e somente após isso que passou a ocorrer o erro.
Obg,
Jr
Obg,
Jr
GOSTEI 0
Massuda
21/06/2005
...esqueci de falar que utilizo o método e hereditariedade...
Explique melhor o que está fazendo. Tenho um aplicativo MDI cujos forms filhos são uma hierarquia de classes e não tive problemas.GOSTEI 0
Araujojunior
21/06/2005
Nâo estou fazendo nada diferente do que vc disse, e estou trabalhando assim como vc com hierarquia de classes........o q poderia ser :(
GOSTEI 0
Massuda
21/06/2005
Não tenho idéia do qur pode estar acontencendo. Já experimentou executar passo-a-passo para ver o que acontece no construtor/OnCreate/OnShow/OnActivate do seu form?
GOSTEI 0
Mascotepc
21/06/2005
Pessoal esse problema esta ocorrendo comigo ! Eu até consigo abrir o formulário mais não consigo fechá-lo. Da um erro de acesso de memória.
Saberiam me dizer o que acontece comigo ?
Saberiam me dizer o que acontece comigo ?
GOSTEI 0
Araujojunior
21/06/2005
Uso o componente UserControl, para controle dos usuários, pode ter algo haver com isso?
GOSTEI 0
Araujojunior
21/06/2005
Ainda não descobri o que é, mas descobri que ocorre com qualquer form, mesmo que não tenha hierarquia de classes :cry:
GOSTEI 0
Massuda
21/06/2005
A única coisa que consigo pensar é que talvez seu form principal (aquele com estilo fsMDIForm) não seja o primeiro form (auto)criado pelo programa usando Application.CreateForm; se for o caso, mude seu programa para que isso aconteça.
A VCL supõe que o primeiro form criado via Application.CreateForm é o form principal do aplicativo e esse form tem um tratamento (interno) especial. No caso de um aplicativo MDI, isso é crítico, pois o Windows tem um tratamentos especial para forms com estilo fsMDIForm.
A VCL supõe que o primeiro form criado via Application.CreateForm é o form principal do aplicativo e esse form tem um tratamento (interno) especial. No caso de um aplicativo MDI, isso é crítico, pois o Windows tem um tratamentos especial para forms com estilo fsMDIForm.
GOSTEI 0
Araujojunior
21/06/2005
Application.Initialize;
Application.CreateForm(TTela_Principal, Tela_Principal);
Application.Title := ´SisCarga - Sistema de Controle de Cargas´;
Application.Run;
Acho que eh marcação :roll:
Application.CreateForm(TTela_Principal, Tela_Principal);
Application.Title := ´SisCarga - Sistema de Controle de Cargas´;
Application.Run;
Acho que eh marcação :roll:
GOSTEI 0
Araujojunior
21/06/2005
Ufa, descobri o q aconteceu.
No meu form principal tinha um Panel, que estava escondendo o Form, apaguei esse panel e os forms voltaram a aparecer.
Isso acontece com qualquer componente visual que eu coloque no form principal.
Mas e agora, como vou colocar Image? Alguem tem solução para isso?
Obg,
No meu form principal tinha um Panel, que estava escondendo o Form, apaguei esse panel e os forms voltaram a aparecer.
Isso acontece com qualquer componente visual que eu coloque no form principal.
Mas e agora, como vou colocar Image? Alguem tem solução para isso?
Obg,
GOSTEI 0
Araujojunior
21/06/2005
Sobe :roll:
GOSTEI 0