domingo, 13 de novembro de 2011

Cannot create form. No MDI are currently active

Hoje vou ensinar como resolver o erro 'Cannot create form. No MDI are currently active' do delphi, geralmente este erro aparece quando você cria uma aplicação no delphi com um form com a propriedade FormStyle = fsMDIForm e um outro form com a propriedade FormStyle = fsNormal.
Vou criar um exemplo para ficar mais claro, Quero criar um programa onde vai ter uma janela pai e uma filho (para quem não sabe oque é isto, é uma janela dentro da outra, tipo no Bloco de notas ou Photoshop. Veja a imagem abaixo).


Para isto coloco no Form1 a propriedade "FormStyle" com o valor "fsMDIForm" é no form2 com o valor "fsMDIChild".

Até aqui o programa funciona perfeitamente, mas agora quero adicionar ao projeto uma tela de login ou uma tela de splash, então crio um novo form e coloco ele como Main Form (Formulário principal que será exibido primeiro).


Mas quando vou compilar aparece o erro "First chance exception at $75969673. Exception class EInvalidOperation with message 'Cannot create form. No MDI forms are currently active'. Process Project1.exe (7832)".


Agora vou ensinar como solucionar este problema.
1º- Vá em Project>Options no Combobox Main Form coloque o formulário Pai, no meu caso o Form1.

2º- Antes de clicar em "OK" passe a tela de login para o listbox da direita Avaliable Forms.


3º- Agora no form3 (login) em "private" digite: fecha : boolean;



4º- Também no form3 mas agora no evento "OnCreate" digite: Fecha := false; 



5º- Novamente no Form3 no evento "onCloseQuery" digite: CanClose := Fecha;



6º- Ainda no Form3 no evento "OnClose" digite: Action := caFree;



7º-  Crie um botão para login e após o código de login digite:
fecha := True;
Form3.Close;







8º- Será necessário criar um botão para fechar este form, adicione um Button e digite:
Fecha := True;
form1.Close;




9º- Agora vá em Project>ViewSource e digite:

Application.CreateForm(Tform3, form3);
  Form3.ShowModal;
  Form3.FormStyle := fsStayOnTop;



Pronto agora e só compilar que seu programa estará funcionando perfeitamente!


By Sr. Z

Nenhum comentário:

Postar um comentário