Aplicação MDI

30/01/2006

Olá camaradas,

Gostaria de tirar uma dúvida, não sei se é possível, mas acho que já vi algo parecido por aí.
Tenho um Form principal do tipo fsMDIForm e alguns do tipo fsMDIChild, até aí tudo bem! O que gostaria de saber é se tem como numa mesma aplicação eu ter 2 ou mais forms do tipo fsMDIForm e que funcionem como tal ?!

Eu explico:

Alguns botões do form principal irão abrir forms filhos, porém um determinado botão abrirá um segundo fsMDIForm que deverá abrir seus próprios filhos dentro de si, não dentro do form principal.

[]´s
AASN


Aasn

Respostas

30/01/2006

Michael

Olá!

Para fazer isso basta vc criar os forms com o parâmetro [b:bc39cf50f3]Owner [/b:bc39cf50f3]dos seus construtores definidos como o form ´pai´, e setar suas respectivas propriedade [b:bc39cf50f3]Parent [/b:bc39cf50f3]para o mesmo, logo após sua criação.

begin
  FormFilho := TFormFilho.Create(FormPai);
  FormFilho.Parent := FormPai;
  FormFilho.Show;
end;


Não me recordo agora como ele vai aparecer visualmente dentro do outro form, se de maneira semelhante ao sistema MDI ou como se fosse um controle dentro de outro apenas. De qualquer forma, acredito que apenas um form possa ser definido como MDIForm em uma mesma aplicação.

[]´s


Responder Citar

30/01/2006

Aasn

Caro Michael,

infelizmente sua dica não surtiu efeito, como em meus testes, os forms filhos criados pelo segundo ´Form Pai´ aparecem no form principal.

[]´s
AASN


Responder Citar

31/01/2006

Massuda

Como o Michael citou no post dele, você não pode ter mais de um form no projeto com estilo fsMDIForm; além disso, o form com estilo fsMDIForm deve ser o form principal do projeto. Isso não tem como ser contornado, pois o conceito de MDI é implementado pelo Windows.

Apenas esclarecendo o que o Michael citou, para fazer com que um form (vamos chamar de A) fique restrito ao interior de outro form (vamos chamar de B), faça o .Parent do form A ser o form B.


Responder Citar

31/01/2006

Michael

Colega [b:bdc5b1b649]AASN[/b:bdc5b1b649],

Testei aqui e funcionou perfeitamente. O resultado visual foi até melhor do que o esperado, pois o form filho ´emulado´ apresentou a barra de título com os botões de controle do Windows, mesmo dentro do form pai não-MDI.

Vc não deve ter tido sucesso em seus testes pq a propriedade [b:bdc5b1b649]FormStyle [/b:bdc5b1b649]do form ´filho´ não pode ser [b:bdc5b1b649]fsMDIChild[/b:bdc5b1b649], e sim [b:bdc5b1b649]fsNormal[/b:bdc5b1b649]. Caso contrário o formulário será mostrado dentro do form MDI da aplicação.

O segredo é apontar o [b:bdc5b1b649]Owner [/b:bdc5b1b649]para o form pai no momento da criação, e setar o [b:bdc5b1b649]Parent [/b:bdc5b1b649]para o mesmo, como o [b:bdc5b1b649]Massuda [/b:bdc5b1b649]reinterou - por sinal de forma mais fácil de se compreender do que a minha apresentada inicialmente.

[]´s


Responder Citar

31/01/2006

Aasn

Caros colegas,

Eu já havia chegado a esse resultado apresentado por vocês, contudo, ao criar um form não mdi parente de um outro form, este não recebe ´foco´, ou seja, para a aplicação o form ativo será o ´pai´.
Por isso o meu interesse em abrir dois forms do tipo MDIForm, para que os filhos recebessem o foco como um MDIChild normal. Eu consigo abrir vários forms MDIForm contudo, ao criar os ´filhos´ estes aparecem sempre no form principal.

De qualquer forma, agradeço o interesse de vcs em tentar achar uma solução para o problema proposto.

Obrigado.

[]´s
AASN


Responder Citar