GARANTIR DESCONTO

Fórum Form MDI Child somente na area do MDI, nao alem... #299488

14/10/2005

0

Prezados, estou precisando de uma rotina, onde o form filho seja ´limitado´ a somente a area do child, tipo, ao clicar em maximizar, ele nao maximize para a area total do desktop, e somente no child do form pai. Alguem tem um codigo, rotina para tal facanha?
Abracos,

Alcantarus


Alcantarus

Alcantarus

Responder

Posts

14/10/2005

Massuda

Dê uma olhada [url=http://forum.clubedelphi.net/viewtopic.php?t=58157]neste tópico[/url]; lá tem um exemplo de como fazer isso interceptando a mensagem WM_WINDOWPOSCHANGING no form MDI filho.


Responder

Gostei + 0

15/10/2005

Alcantarus

Dê uma olhada [url=http://forum.clubedelphi.net/viewtopic.php?t=58157]neste tópico[/url]; lá tem um exemplo de como fazer isso interceptando a mensagem WM_WINDOWPOSCHANGING no form MDI filho.


Caro Massuda,

Foi de grande valia sua sugestao, inclusive incluir todos os dois codigos desse post acima, porem, eu ainda queria QUE, se possivel, que o MDI Child ficasse ´totallmente´ LIMITADO somente a area do form pai. Tipo: Sempre que eu maximizar o Form Filho, no modelo convencional, ele maximiza, atingindo a area do Form Pai, quero que ele SOMENTE maximize na area ´delimitada´ pelo Form Pai, ficando assim, aparecendo a barra de titulo no FormFilho.Top := 0, FormFilho.Left := 0, preenchedo o restante da area do FormPai ao ser maximizado...

Nao sei se deu pra vc entender... mas.... se pudesse me ajudar, agradeco muito.

Abracos e felicidades,

Alcantarus.


Responder

Gostei + 0

16/10/2005

Massuda

...Sempre que eu maximizar o Form Filho, no modelo convencional, ele maximiza, atingindo a area do Form Pai, quero que ele SOMENTE maximize na area ´delimitada´ pelo Form Pai, ficando assim, aparecendo a barra de titulo no FormFilho.Top := 0, FormFilho.Left := 0, preenchedo o restante da area do FormPai ao ser maximizado...
Infelizmente, MDI é implementado dentro do Windows e por isso não tem jeito de fazer o que você descreveu; o form filho sempre irá ocupar apenas parte do form pai.


Responder

Gostei + 0

17/10/2005

Alcantarus

Massuda, isso ta dando pano pra manga hein!

Prezado amigo,

Ainda nao ficou claro para mim :? ... bem, desculpe-me por incomoda-lo com esse incansavel assunto, mas, nao tenho outro a recorrer, e tb esse eh o melhor forum que conheco... bem, vamos ao assunto...

Por favor, gostaria que vc analizasse essa imagem abaixo.

[URL=http://img288.imageshack.us/my.php?image=formpaiformfilho6fv.jpg][img:95a218596a]http://img288.imageshack.us/img288/8717/formpaiformfilho6fv.th.jpg[/img:95a218596a][/URL]

Grato,

Alcantarus


Responder

Gostei + 0

17/10/2005

Massuda

Eu já tinha visto o esquema que você colocou em outro tópico.

Você tem duas saídas....

* usar a API do Windows para não maximizar o form, mas sim fazer ele ocupar todo o espaco disponível; isso envolve interceptar diferentes mensagens que resultam no form maximizado.

* abandonar MDI.

Sobre a segunda opção... Se você vai permitir apenas um único form aberto dentro do form principal, ocupando todo o espaço visível, então não faz sentido usar MDI; use SDI e faça os diferentes forms do programa serem embutidos no form principal.


Responder

Gostei + 0

17/10/2005

Alcantarus

Nao sei como criar Forms SDI....


Tem algum exemplo para tal?

Grato,

Alcantarus.


Responder

Gostei + 0

17/10/2005

Alcantarus

Nao sei como criar Forms SDI.... Tem algum exemplo para tal? Grato, Alcantarus.



Resolvido.


Responder

Gostei + 0

17/10/2005

Massuda

SDI significa Single Document Interface (algo como Interface Única de Documento, ou simplesmente um único form). Para criar um projeto SDI novo, vá em File|New|Application ou File|New|Projects|SDI. Isso deve resolver a questão do form principal.

Com relação aos forms secundários (ou filhos se você preferir), não deixe eles na lista de auto-create, mas sim crie eles quando for exibi-los fazendo algo assim:
var
  MeuFormFilho: TFormFilho;
...
  MeuFormFilho := TFormFilho.Create(nil);
  MeuFormFilho.Parent := MeuFormPrincipal;
  MeuFormFilho.Align := alClient;
...
...e lembre de destruir o form (usando .Free) depois que não precisar mais do form.

Provavelmente será mais fácil trabalhar com os forms filhos que você criar uma hierarquia de classes (um form filho base e forms filhos descendentes que são especializados).


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar