Einzelnen Beitrag anzeigen

Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#1

Rahmenlose Form maximieren auf Sreen-WorkArea

  Alt 25. Aug 2009, 00:40
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.