![]() |
BorderStyle=nsNone und WindowState=wsMaximized
Die Kombination von myForm.BorderStyle=bsNone (um ein rahmenloses Fenster zu erhalten) und myForm.WindowState=wsMaximized (um es zu maximieren) bringt i.A. den unerwünschten Effekt mit sich, dass die Taskleiste ebenfalls übedeckt wird. Die Lösung besteht darin, die Methode "RequestAlign" des Formulars zu überschreiben, um so die Größenänderung steuern zu können.
Zuerst die Deklaration:
Delphi-Quellcode:
Und dann die Methode selber:
TfrmMain = class(TForm)
... procedure RequestAlign; override; ... private ... public ... end;
Delphi-Quellcode:
procedure TfrmMain.RequestAlign;
var rect : TRect; begin SystemParametersInfo(SPI_GETWORKAREA, 0, @rect, 0); Constraints.MaxHeight:= rect.Bottom; inherited RequestAlign; end; |
Eine Idee dazu:
Wenn die Startleiste oben, links oder rechts ist, wird die Routine Probleme machen, oder? Wie wäre es anstatt mit:
Code:
myForm.BorderStyle := bsNone;
myForm.Align := alClient; |
Hallo,
erstmal Danke für den Hinweis. Ich habe erneut in die DOkumentation gesehen und festgestellt, dass es offenbar einen besseren Weg gibt, dieses Problem zu lösen: Man reagiert auf die Nachricht "WM_GETMINMAXINFO". Auszug aus der MSDN-Library: Zitat:
Die Deklaration:
Delphi-Quellcode:
Die Implementation:
procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
Delphi-Quellcode:
procedure TfrmMain.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
var rect : TRect; Begin SystemParametersInfo(SPI_GETWORKAREA, 0, @rect, 0); Msg.MinMaxInfo^.ptMaxSize.X:= rect.Right-rect.Left; Msg.MinMaxInfo^.ptMaxSize.Y:= rect.Bottom-rect.Top; Msg.MinMaxInfo^.ptMaxPosition.X:= rect.Left; Msg.MinMaxInfo^.ptMaxPosition.Y:= rect.Top; Msg.Result:= 0; End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz