Einzelnen Beitrag anzeigen

MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

WM_GETMINMAXINFO verändern wegen Titelleiste im maximierten Zustand

  Alt 29. Mär 2021, 17:54
Hallo

Im maximierten Zustand ist ja die Titelleiste ein wenig in der Höhe kleiner. Also sie wird wegen dem Rahmen etwas unter der 0 Position (also Top < 0 ; je nach Rahmendicke wohl) angezeigt. Das hat mir noch nie gefallen. Ich habe jetzt mit
Delphi-Quellcode:
procedure TForm1.WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
Var BW : Integer;
    AR : TRect;
begin
  inherited;
  SystemParametersInfo(SPI_GETWORKAREA, 0, @AR, 0);
  BW := GetSystemMetrics(SM_CYSIZEFRAME) + GetSystemMetrics(SM_CXPADDEDBORDER);
  Message.MinMaxInfo.ptMaxPosition.SetLocation(AR.Left-BW,0);
  Message.MinMaxInfo.ptMaxSize.SetLocation(AR.Width+BW+BW,AR.Height-1); // ohne "-1" geht es nicht
  Message.MinMaxInfo.ptMaxTrackSize := Message.MinMaxInfo.ptMaxSize;
end;
und noch in Verbindung mit
Delphi-Quellcode:
procedure TForm1.WM_NCCalcSize(var Msg: TWMNCCalcSize);
Var BW : Integer;
begin
  inherited;
  BW := GetSystemMetrics(SM_CYSIZEFRAME) + GetSystemMetrics(SM_CXPADDEDBORDER);
  if windowstate = wsMaximized then inc(Msg.CalcSize_Params.rgrc[0].Bottom,BW);
end;
erreicht, dass die Titelleiste im maximierten Zustand gleich groß bleibt. Also Top=0. Das schaut schöner aus

Wenn man die Taskleiste vergrößert oder verschiebt (während das Fenster nun maximiert ist), geht der Effekt leider verloren. Also die Titelleiste wird dann wieder unter 0 (Top-Position) angezeigt. WM_GETMINMAXINFO wird aber bei so einer Aktion aufgerufen. Wohl etwas zu spät denn wenn ich manuell das Fenster wieder verkleinere und vergrößere, dann geht es wieder. Weiß jemand wie ich das besser machen kann?
  Mit Zitat antworten Zitat