31 de jan. de 2005

Como evitar que a barra de tarefas oculte parte do form maximizado?

Do fórum ClubeDelphi:

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.

Como o problema não pode ser reproduzido, ao longo da discussão apareceu o causador do problema:

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 causa o problema... Testei o tratamento da mensagem WM_GETMINMAXINFO e isso resolve o problema:

1 type 2 TSeuForm = class(... 3 private 4 procedure WMGetMinmaxInfo(var Msg: TWMGetMinmaxInfo); message WM_GETMINMAXINFO; 5 ... 6 7 procedure TSeuForm.WMGetMinmaxInfo(var Msg: TWMGetMinmaxInfo); 8 var 9 R: TRect; 10 begin 11 inherited; 12 13 // Obtem o retangulo com a area livre do desktop 14 SystemParametersInfo(SPI_GETWORKAREA, SizeOf(R), @R, 0); 15 16 Msg.MinMaxInfo^.ptMaxPosition := R.TopLeft; 17 OffsetRect(R, -R.Left, -R.Top); 18 Msg.MinMaxInfo^.ptMaxSize := R.BottomRight; 19 end;

Um comentário:

Willian Nello disse...

valeu, me tirou do sufoco, funfa muiiito bem