AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Sonstiges Kein Fenstertitel und trotzdem maximiert
Thema durchsuchen
Ansicht
Themen-Optionen

Kein Fenstertitel und trotzdem maximiert

Ein Thema von CalganX · begonnen am 29. Apr 2004 · letzter Beitrag vom 1. Mai 2004
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Kein Fenstertitel und trotzdem maximiert

  Alt 29. Apr 2004, 19:03
Wenn man ein Fenster, dass keinen Fenstertitel haben soll und maximiert ist (sprich die Eigenschaft BorderStyle auf bsNone und die Eigenschaft WindowState auf wsMaximized des Forms steht), so wird auch die Taskbar überdeckt. Unter Umständen ein unschöner Effekt.

Umgehen kann man das mit folgender Methode:
Delphi-Quellcode:
procedure TfrmMain.RequestAlign;
var
  rect: TRect;
begin
  SystemParametersInfo(SPI_GETWORKAREA, 0, @rect, 0);
  Constraints.MaxHeight := rect.Bottom;
  inherited RequestAlign;
end;

{Die Funktion muss natürlich als Methode von TfrmMain deklariert werden}
Daniel hat dies in diesem Beitrag erklärt. Dies funktioniert einwandfrei allerdings nur, wenn die Taskbar unten ist.


Das Problem kann man umgehen, in dem man sich eine neue Funktion schreibt, die auf die Nachricht WM_GETMINMAXINFO reagiert.
Auszug aus dem MSDN zu WM_GETMINMAXINFO
The MINMAXINFO structure contains information about a window's maximized size and position and its minimum and maximum tracking size.


Schreibt man daraus eine neue Funktion (keine Erweiterung für obige Funktion) so kann man folgende Funktion verwenden, egal wo die Taskbar sich befindet:
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;
Diese muss folgendermaßen als Methode von TfrmMain deklariert werden:
procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO; Diese Methode stammt ebenfalls von Daniel.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Kein Fenstertitel und trotzdem maximiert

  Alt 29. Apr 2004, 19:58
Würde nicht auch ein einfaches...
Delphi-Quellcode:
Procedure TFormIrgendWas.WMGetMinMaxInfo(Var Msg: TWMGetMinMaxInfo);
Var
  MoniRect: TRect;
Begin

  MoniRect := Screen.Monitors[Monitor.MonitorNum].WorkareaRect;

  With MoniRect Do
  Begin
    msg.MinMaxInfo.ptMaxSize := TopLeft;
    msg.MinMaxInfo.ptMaxSize := Point((Right - Left), (Bottom - Top));
  End;
End;
... reichen?

Man muss doch nicht immer alles auf Teufel komm' raus mit Pointern erschlagen.
Vor Allem wenn auch ein 3-Zeiler den Job erfüllt.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#3

Re: Kein Fenstertitel und trotzdem maximiert

  Alt 1. Mai 2004, 23:08
So wäre es ein 2-Zeiler.
Delphi-Quellcode:
Procedure TFormIrgendWas.WMGetMinMaxInfo(Var Msg: TWMGetMinMaxInfo);
Begin
  With Monitor.WorkareaRect Do
  Begin
    msg.MinMaxInfo.ptMaxPosition := TopLeft;
    msg.MinMaxInfo.ptMaxSize := Point((Right - Left), (Bottom - Top));
  End;
End;
Edit: Ich habe gerade einen Tippfehler gefunden.
Ich hatte 2-mal ptMaxSize geschrieben
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz