Barra de tarefas oculta parte do form

Delphi

21/01/2005

Olá pessoal! Estou com uma dúvida...

Quando deixo o meu form principal com a propriedade WindowState com o valor wsMaximized, a parte inferior do form fica oculta pela barra de tarefas. O Form não respeita o espaço livre da tela. Tentei algumas soluções mas sem suceso! Alguém sabe como posso fazer pra resolver isso?

Obrigado!


Rabay

Rabay

Curtidas 0

Respostas

Massuda

Massuda

21/01/2005

Usando um projeto novo, não consigo reproduzir seu problema.[list:e647672c2d][*:e647672c2d]Qual a versão do seu Delphi?[*:e647672c2d]Qual versão do Windows está dando problema?[*:e647672c2d]Qual o valor do BorderStyle, FormStyle e Position do seu form?[*:e647672c2d]Você alterou o Constraints do form?[*:e647672c2d]Você faz algum processamento especial da mensagem WM_GETMINMAXINFO?[/list:u:e647672c2d]


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

21/01/2005

Colega,

BorderStyle para bsNone


GOSTEI 0
Rabay

Rabay

21/01/2005

Seguem maiores informações:


[*]Qual a versão do seu Delphi?
Delphi 7 Enterprise

[*]Qual versão do Windows está dando problema?
Windows 2000 Professional

[*]Qual o valor do BorderStyle, FormStyle e Position do seu form?
BorderStyle =
FormStyle =
Position =

[*]Você alterou o Constraints do form?
Não (não sei o que é isso! :-))

[*]Você faz algum processamento especial da mensagem WM_GETMINMAXINFO?
Não (Também não sei o que é!)

Espero ter ficado mais claro o problema!


GOSTEI 0
Rabay

Rabay

21/01/2005

[quote:48c6284b52=´Aroldo Zanela´]Colega,

BorderStyle para bsNone[/quote:48c6284b52]

Olá Aroldo!

Fiz o que você disse, mas neste caso a borda some! E o programa ocupa a tela toda, ocultando até a barra de tarefas. O que eu gostaria que acontecesse é o programa ocupar toda a tela útil, deixando visível apenas a barra de tarefas! :-)

Obrigado!


GOSTEI 0
Rabay

Rabay

21/01/2005

Corrigindo o post anterior... :-)

Seguem maiores informações:


[*]Qual a versão do seu Delphi?
Delphi 7 Enterprise

[*]Qual versão do Windows está dando problema?
Windows 2000 Professional

[*]Qual o valor do BorderStyle, FormStyle e Position do seu form?
BorderStyle = bsSizeable
FormStyle = fsNormal
Position = poDesktopCenter

[*]Você alterou o Constraints do form?
Não (não sei o que é isso! )

[*]Você faz algum processamento especial da mensagem WM_GETMINMAXINFO?
Não (Também não sei o que é!)

Espero ter ficado mais claro o problema!


GOSTEI 0
Massuda

Massuda

21/01/2005

Seguem maiores informações: [...]

Não consigo reproduzir seu problema (uso D5 + Win XP/SP2).

Algumas sugestões:[list=1:5e1f0aa763][*:5e1f0aa763]Deixe o WindowState do seu form em wsNormal (via Object Inspector) e mude o WindowState no evento OnCreate do seu form

[*:5e1f0aa763]Deixe o WindowState do seu form em wsNormal (via Object Inspector) e no evento OnCreate do seu form inclua o seguinte:
SendMessage(Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);


[*:5e1f0aa763]Inclua o seguinte no seu form:
type
  TSeuForm = class(...
  private
    procedure WMGetMinmaxInfo(var Msg: TWMGetMinmaxInfo);
      message WM_GETMINMAXINFO;
  // ...

procedure TSeuForm.WMGetMinmaxInfo(var Msg: TWMGetMinmaxInfo);
var
  R: TRect;
begin
  inherited;

  // Obtem o retangulo com a area livre do desktop
  SystemParametersInfo(SPI_GETWORKAREA, SizeOf(R), @R, 0);

  Msg.MinMaxInfo^.ptMaxPosition := R.TopLeft;
  OffsetRect(R, -R.Left, -R.Top);
  Msg.MinMaxInfo^.ptMaxSize := R.BottomRight;
end;
[/list:o:5e1f0aa763]


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

21/01/2005

[quote:34c8476e1c=´Aroldo Zanela´]Colega, BorderStyle para bsNone


Olá Aroldo!

Fiz o que você disse, mas neste caso a borda some! E o programa ocupa a tela toda, ocultando até a barra de tarefas. O que eu gostaria que acontecesse é o programa [b:34c8476e1c]ocupar toda a tela útil, deixando visível apenas a barra de tarefas[/b:34c8476e1c]! :-)

Obrigado![/quote:34c8476e1c]
Colega,

Basta então, alterar a propriedade WindowState para wsMaximized.


GOSTEI 0
Rabay

Rabay

21/01/2005

[quote:900ac57e71=´Aroldo Zanela´]Colega,

Basta então, alterar a propriedade WindowState para wsMaximized.[/quote:900ac57e71]


Exatamente, só que o problema está acontecendo justamente por causa disto! Eu seto esta propriedade e a janela fica maior que a área disponível na tela.


GOSTEI 0
Rabay

Rabay

21/01/2005

[quote:adf767cd9f=´rabay´]Seguem maiores informações: [...]

Não consigo reproduzir seu problema (uso D5 + Win XP/SP2).

Algumas sugestões...

[/quote:adf767cd9f]


Massuda, a dica três é complementar a dica dois ou cada uma é independente? Se sim, como faço para utilixar a procedure da dica três?


Grato!


GOSTEI 0
Massuda

Massuda

21/01/2005

a dica três é complementar a dica dois ou cada uma é independente?
É independente.

como faço para utilixar a procedure da dica três?
Você não precisa fazer nada além de adicionar a procedure na classe do seu form.

Essa procedure irá tratar a mensagem do Windows que pede o tamanho e a posição do seu form quando maximizado/minimizado; a idéia é dizer ao Windows para usar a área correspondente ao desktop.


GOSTEI 0
Rodc

Rodc

21/01/2005

hehe... já tive este problema tb. S não me engano vc não pode desabilitar os botões de maximizar do form principal.
Tenta lá... na opção BorderIcons deixa True para biMaximize.

Rodrigo Cesar


GOSTEI 0
Massuda

Massuda

21/01/2005

S[e] não me engano vc não pode desabilitar os botões de maximizar do form principal. Tenta lá... na opção BorderIcons deixa True para biMaximize.
Puxa... não ter o botão Maximizar e iniciar com o form maximizado dá o problema... Testei o tratamento da mensagem WM_GETMINMAXINFO como sugeri e isso parece resolver o problema neste caso.


GOSTEI 0
Rabay

Rabay

21/01/2005

[quote:b491a1cd12=´rodc´]S[e] não me engano vc não pode desabilitar os botões de maximizar do form principal. Tenta lá... na opção BorderIcons deixa True para biMaximize.
Puxa... não ter o botão Maximizar e iniciar com o form maximizado dá o problema... Testei o tratamento da mensagem WM_GETMINMAXINFO como sugeri e isso parece resolver o problema neste caso.[/quote:b491a1cd12]

Realmente o tratamento da mensagem resolveu o problema!!!

Deixei como Maximized e o botão de maximizar desabilitado e inclui o código que você passou. Funcionou direitinho!

Muito obrigado a todos pela ajuda!!!


GOSTEI 0
Lakhan

Lakhan

21/01/2005

Galera, tive o mesmo problema e resolví o problema de outra forma...
Percebí que esse problema só ocorria quando a propriedade Align está configurada como AlNone.
Definindo como AlClient o form ficará automaticamente com o tamanho adequado, pegando o desktop todo sem cobrir a barra de tarefas...

Comigo deu certo com todas variações de estilo de borda e form que testei...


GOSTEI 0
Rmarcelop

Rmarcelop

21/01/2005

De acordo como o nosso amigo lakhan falou, é só fazer:

BorderIcons = [biSystemMenu, biMinimize, biMaximize]
BorderStyle = bsSingle
WindowState = wsNormal
Align = alClient

[]´s


GOSTEI 0
Anderson Oliveira

Anderson Oliveira

21/01/2005

Alguém já conseguiu fazer o MDI Filho não obedecer a limitação do MDI PAI? Ou seja, extrapolando os limites do form principal...
GOSTEI 0
Claudio Poletto

Claudio Poletto

21/01/2005

Galera, consegui resolver, a tela do form principal fica maximizada acima da barra de tarefas do windows, fiz muitas tentativas até descobrir, vou deixar aqui o que fiz caso alguém esteja com mesmo problema....

BorderIcons=
*biSystenMenu:=False
*biMinimized:=True
*biMaximized=True
*biHelp=False

BorderStyle=bsSingle

Valeu... grande abraço...
GOSTEI 0
POSTAR