Array
(
)

Aplicação MDI

Aasn
   - 30 jan 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


Michael
   - 30 jan 2006

Olá!

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

#Código

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


Aasn
   - 30 jan 2006

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


Massuda
   - 31 jan 2006

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.


Michael
   - 31 jan 2006

Colega AASN,

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 FormStyle do form ´filho´ não pode ser fsMDIChild, e sim fsNormal. Caso contrário o formulário será mostrado dentro do form MDI da aplicação.

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

[]´s


Aasn
   - 31 jan 2006

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