quinta-feira, março 06, 2008

Delphi: showmodal em aplicação MDI

O padrão MDI é um tipo de interface onde múltiplos documentos podem ser abertos dentro de uma única janela. Cada um desses documentos, por sua vez, abrem-se cada qual em uma
janela, dentro da janela "pai". Um exemplo de aplicação que usa um padrão
desse tipo é o Adobe Photoshop.

A vantagem do padrão MDI é que ele dá a possibilidade do usuário utilizar duas ou mais janelas, comparando dados entre elas. Uma desvantagem é que a proliferação de muitas janelas abertas pode deixar o sistmea lento e o usuário perdido.

Uma dúvida muito comum em aplicações Delphi que utilizam MDI é quando o analista tem que recorrer ao recurso de janelas modais, aquelas que bloqueiam o usuário enquanto a janela está ativa. No delphi, o formstyle da janela que vai ser modal tem que ser fsNormal, uma janela comum, e a janela não pode estar visível, portanto, a propriedade visible tem que estar configurada para False.

A dica de ouro é que estas propriedades setadas em design time não funcionam; quando você for executar o showmodal, ocorrerá um erro de excessão dizendo que a janela não pode ser modal. A solução é fazer tudo em runtime:


application.createform(TfrmLocalizarPessoa,frmLocalizarPessoa);
frmLocalizarPessoa.Visible:=false;
frmLocalizarPessoa.FormStyle:= fsNormal;
frmLocalizarPessoa.ShowModal;



Bons códigos.

4 comentários:

Edmilson disse...

Obrigado pela dia.

Anônimo disse...

cannot a hide mdi child form

Alexandre Mello disse...

Uma pequena correção:
Primeiro:
frmLocalizarPessoa.FormStyle:= fsNormal;

e depois:
frmLocalizarPessoa.Visible:=false;

Para evitar o erro :
cannot a hide mdi child form

Anônimo disse...

Perfeito, obrigado!!!!