Ein rahmenloses Fenster wurde von mir mit eigenen Min-, Max- und Close-Buttons ausgestattet. Beim Maximieren wird das Fenster jedoch nicht auf den Bereich von Screen.WorkArea vergrößert, sondern es verdeckt auch die Taskbar.
Erzeugt wird das rahmenlose Fenster mit:
Delphi-Quellcode:
// Form ohne Titelleiste und mit dünnem Rahmen erzeugen.
procedure TfrmMain.CreateParams(var Params: TCreateParams);
begin
Inherited Createparams(Params);
Params.Style := (Params.Style or WS_POPUP) and not WS_DLGFRAME;
end;
Maximier-Befehle:
Delphi-Quellcode:
frmMain.WindowState := wsMaximized;
oder:
PostMessage(frmMain.Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
Derzeit habe ich das gelöst, indem ich dem Form-BoundsRect das WorkAreaRect zuweise. Um das Form-Rect mit dem WorkArea-Rect zu vergleichen, frage ich Left, Right, Top, Bottom, ... einzeln ab. (Maximized-Zustand kann ich ja nicht abfragen.)
Fragen:
1. Wie kann ich das "echte" Maximieren auf das WorkArea begrenzen?
2. Wie vergleiche ich zwei Strukturen (TRects), ohne jedes einzelne Element zu vergleichen?
(Also eine Lösung ala "if (Rect1 = Rect2) then".)
(<- Extra-Thread eröffnen?)
3. Wie erzeuge ich eine rahmenloses Fenster, das den Punkt "Maximieren" im System-Menü hat?
Guido.