MDIChild sempre maximizadas, como?

Delphi

28/06/2006

Tem como eu fazer isso? Pois quando tenho uma tela maximizada, e abro outra.. simplesmente as duas ficam em tamanho normal... e eu queria que ficassem sempre maximizadas...

Desde já agradeço

[]s


Titanius

Titanius

Curtidas 0

Respostas

Aasn

Aasn

28/06/2006

Caro titanus,

Configurar a propriedade WindowState dos forms childs para wsMaximized deve resolver!
Agora, se vc não quiser permitir que elas sejam redimensionadas de maneira nenhuma, terá que controlar as mensagens de eventos dos forms.

[]´s
AASN


GOSTEI 0
Titanius

Titanius

28/06/2006

Olá AASN, já tinha tentado isso anteriormente e nada... o que estou fazendo é no OnActive:

  if WindowState <> wsMaximized then
    WindowState := wsMaximized;


mas to achando isso um ´tapa buraco´ e tem aquele efeito de maximizando que dá que fica muito ruim, quando se tem muitos forms abertos..


[]s


GOSTEI 0
Massuda

Massuda

28/06/2006

Pelo que me lembro, esse comportamento é determinado pelo Windows. Acho que dá para você usar o evento OnShow ao invés do OnActivate.


GOSTEI 0
Titanius

Titanius

28/06/2006

Olá massuda, realmente se for do windows complicou... :D

Mas eu tenho que usar no OnActive mesmo.. porque posso ter mais de 5 telas abertas... e ao dar o show funciona, mas depois ele ativa o OnActive, na hora que eu vejo a tela..

Obrigado,

[]s


GOSTEI 0
Massuda

Massuda

28/06/2006

Entendi... você quer que o MDI fique sempre maximizado.

Acho (não testei) que uma alternativa seria você não maximizar o form, mas sim definir o tamanho máximo/mínimo do form (via TForm.Constraints) como sendo o tamanho da área disponível no form principal; note que você precisa mudar o valor se o form principal for redimensionado. Para obter o tamanho da área cliente do form principal...
var
  R: TRect;
...
  GetWindowsRect(SeuFormPrincipal.ClientHandle, R);
  // largura = R.Right - R.Left + 1
  // altura = R.Bottom - R.Top + 1
  // posição = R.Top, R.Left
...



GOSTEI 0
Titanius

Titanius

28/06/2006

Olá massuda... tentei as deu acesso de violação de memória...

tentei:

var 
  R: TRect; 
begin
  GetWindowRect(FrmPrincipal.ClientHandle, R);
  FrmRequisito.Width := R.Right - R.Left + 1;
  FrmRequisito.Height := R.Bottom - R.Top + 1;


no OnShow, OnCreate do Form... e o mesmo erro...


[]s


GOSTEI 0
Massuda

Massuda

28/06/2006

Se você fez isso no form MDI filho, isto deveria funcionar...
var 
  R: TRect; 
begin
  GetWindowRect(FrmPrincipal.ClientHandle, R);
  // poderia ser...
  // GetWindowRect(Application.MainForm.ClientHandle, R);

  Width := R.Right - R.Left + 1;
  Height := R.Bottom - R.Top + 1;



GOSTEI 0
Titanius

Titanius

28/06/2006

Cara pode pareceer mentira, mas agora funcionou... sabe qual foi a difereça?
isso daqui:

var
R: TRect;
begin
GetWindowRect(FrmPrincipal.ClientHandle, R);

[b:7c9e9309d4]FrmRequisito.[/b:7c9e9309d4]Width := R.Right - R.Left + 1;
[b:7c9e9309d4]FrmRequisito.[/b:7c9e9309d4]Height := R.Bottom - R.Top + 1;


Estava tentando com o negrito, e nao funcionava... aí fiz tirando a parte do negrito, como vc me mostrou.. e funcionou.. estranho né!??


Muito obrigado massuda...

[]s


GOSTEI 0
POSTAR