Fórum Barra de tarefas oculta parte do form #266293
21/01/2005
0
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
Curtir tópico
+ 0Posts
21/01/2005
Massuda
Gostei + 0
21/01/2005
Aroldo Zanela
BorderStyle para bsNone
Gostei + 0
21/01/2005
Rabay
[*]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
21/01/2005
Rabay
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
21/01/2005
Rabay
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
21/01/2005
Massuda
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:
1 | SendMessage(Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0); |
[*:5e1f0aa763]Inclua o seguinte no seu form:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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; |
Gostei + 0
21/01/2005
Aroldo Zanela
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
28/01/2005
Rabay
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
28/01/2005
Rabay
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
28/01/2005
Massuda
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
28/01/2005
Rodc
Tenta lá... na opção BorderIcons deixa True para biMaximize.
Rodrigo Cesar
Gostei + 0
28/01/2005
Massuda
Gostei + 0
28/01/2005
Rabay
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
09/01/2008
Lakhan
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
25/02/2008
Rmarcelop
BorderIcons = [biSystemMenu, biMinimize, biMaximize]
BorderStyle = bsSingle
WindowState = wsNormal
Align = alClient
[]´s
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)