AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WM_GETMINMAXINFO verändern wegen Titelleiste im maximierten Zustand
Thema durchsuchen
Ansicht
Themen-Optionen

WM_GETMINMAXINFO verändern wegen Titelleiste im maximierten Zustand

Ein Thema von MicMic · begonnen am 29. Mär 2021 · letzter Beitrag vom 31. Mär 2021
Antwort Antwort
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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.818 Beiträge
 
Delphi 12 Athens
 
#2

AW: WM_GETMINMAXINFO verändern wegen Titelleiste im maximierten Zustand

  Alt 29. Mär 2021, 18:13
Wie kommst du auf die Idee, das Fenster wäre nach oben verschoben?

Wenn maximiert, dann ist der Titel wirklich kleiner, was schon dadurch auffällt, dass das Icon, die Schrift und die Buttons nicht oben raushängen, sondern tiefer liegen,
also mittig in der Leiste, wobei die Buttons normals etwas höher liegen, wie die Mitte. (fällt gut auf, wenn man es übereinanderlegt und bemerkt, dass die Leisten unten nicht übereinander liegen)
Nur der "unsichtbare" Rahmen (in XP noch sichtbar) liegt etwas oberhalb/außerhalb. (war bei Multimonitor manchmal drüben zu sehen)

Also ähnlich wie bei BorderStyle=bsToolWindow.



Man kann zwar im WM_GETMINMAXINFO die Position etwas verschieben, aber wirklich Spaß macht es nicht.
Delphi-Quellcode:
procedure WMGetMinMaxInfo(Var Msg: TWMGetMinMaxInfo); Message WM_GETMINMAXINFO;

Msg.MinMaxInfo^.ptMaxPosition.Y
Angehängte Grafiken
Dateityp: png IstFlacher.png (9,3 KB, 18x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Mär 2021 um 18:22 Uhr)
  Mit Zitat antworten Zitat
MicMic

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

AW: WM_GETMINMAXINFO verändern wegen Titelleiste im maximierten Zustand

  Alt 29. Mär 2021, 19:03
Ich verändere es ja mit "ptMaxPosition.SetLocation".
Geht ja auch aber wie gesagt... verschiebt man die Taskleiste, werden Fenster ja neu angeordnet. Also die maximierten Fenster. Und hier stimmt's dann nicht mehr. Man muss dann das Programm neu starten oder das maximierte Fenster kurz verkleinern und wieder maximieren. Dann passt es wieder. Sollte aber nach dem verschieben der Taskleiste automatisch passieren. Ich denke "WM_GETMINMAXINFO" wird da zu früh verarbeitet, wenn man die Taskleiste verschiebt oder vergrößert/verkleinert.

Mir gefällt die größere Titelleiste einfach besser. Sie wird ja überall (bei normalen Titelleisten) etwas kleiner im maximierten Zustand (zumindest die Optik). Nicht nur Delphi-Programme. Edge macht ja seine eigene aber eigene Titelleisten haben meist ein anderes Problem (Inhalt wackelt mehr bei der Fenstervergrößerung mit der Maus).
  Mit Zitat antworten Zitat
MicMic

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

AW: WM_GETMINMAXINFO verändern wegen Titelleiste im maximierten Zustand

  Alt 30. Mär 2021, 12:56
Jetzt mal wieder ein neuer Versuch mit eigener Titelleiste. Mal guggen. So hab ich die Kontrolle
Irgendwie versuche ich da schon eine Weile was. Da scheint irgendwo ein Bug zu sein... Grafiktreiber oder Windows. Ist schwer zu erklären aber Systemweit ändert sich bei mir immer etwas. Ihr kennt das ja bestimmt. Wenn schlecht programmiert, dann flackert viel (bei Größenänderungen des Fensters). Windows macht da schon gute Arbeit, dass Inhalte rechts und unten am Platz bleiben, wenn Fenster links oder oben vergrößert wird. Aber beim rumtesten kommt es vor, dass sich was verabschiedet und plötzlich flackert alles in Windows selbst auch. So dann auch mein Programm. Jetzt gehts grad wieder, mal schauen wie lange.

Zum Beispiel gibt es große Komponenten, irgendwas mit StyleControls. Schöne gebaute Titelleisten mit weiteren Buttons/Text und sonstige Spielereien. Alles schön und gut aber hier flackert's auch, wenn das Fenster links oder oben vergrößert wird. Das kann man dann nicht wirklich gebrauchen. Bei mir geht es gerade besser. Fragt sich nur wie lange
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.818 Beiträge
 
Delphi 12 Athens
 
#5

AW: WM_GETMINMAXINFO verändern wegen Titelleiste im maximierten Zustand

  Alt 30. Mär 2021, 14:23
z.B. DevExpress, und vermutlich auch einer der vielen Styles aus'm GetIt, können das komplette Fenster übermalen, inkl. eigener Titelleiste und Rahmen.


Aber Delphi-Referenz durchsuchenTTitleBarPanel fügt nur was in die Leiste ein, aber die Größe und das grundsätzliche Design ändert es nicht. (das, was die IDE selbst benutzt)
http://docwiki.embarcadero.com/RADSt...e_Titelleisten
https://www.youtube.com/watch?v=tCcqu_emZlk
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
MicMic

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

AW: WM_GETMINMAXINFO verändern wegen Titelleiste im maximierten Zustand

  Alt 30. Mär 2021, 16:51
Habe das jetzt mal ausprobiert, weil ich neugierig war.
Also die VCL Demos

Das ist ja das schlechteste was ich bis jetzt gesehen habe. Sorry. Habe mich jetzt nicht auf den Inhalt konzentriert aber auf das geflackere. Also es flackert und recht langsam ist der Aufbau. Stört total. Zugegeben ist mein Windows zum Testen auch verändert, mit solchen ThemePatch Zeugs um das Windows Design zu verändern. Da muss man ja wissen, was passiert wenn man schon mit eigenen Rahmen oder Titelleisten rumprobiert. Aber habe gerade normales Windows-Design aktiviert. Der Test bezieht sich auf Fenster-Größenänderung mit der Maus am linken oder oberen Fensterrahmen. Ich gehe her und vergrößere/verkleinere das Fenster und der Inhalt von DevExpress flackert hier am meisten. Zur Zeit aber auch mein MS Edge. Da sehe ich schnell wie rechts (wenn ich am linken Fensterrahmen das Fenster vergrößere) das zeichnen nicht nachkommt (es kurz schwarz ist). Bei DevExpress ist es echt katastrophal. Da flackern die recht oder unten angeordneten Komponenten. Die Titelleiste auch. Schade das ich nicht gerade ein frisches Windows habe um das dann nochmals zu testen.

Aber hier ist halt der Wurm drin. In einem frischen Windows habe ich damals auch ein wenig mit Delphi und solche Themen (Rahmen, eigene Titelleiste) herumgetestet. Irgendwann (nicht gleich) läuft da was falsch. Irgendein Speicher voll (etwas wird deaktiviert?) ob in Windows oder beim Grafiktreiber... plötzlich reagieren alle Fenster anders und flackern mehr. Egal ob Delphi-Forms oder andere Programme. Das passiert auch, wenn man ein Fenster mit Aero Snap positioniert. Das wollte ich hier damals mal erklären. Ist aber schwierig denn der nicht identifizierbare Bug tritt nicht ganz normal auf. Aero Snap muss man hier recht schnell hintereinander in allen möglichen Positionen anwenden. Irgendwann passiert es halt und plötzlich flackert Windows.

P.s TTitelBarPanel habe ich noch nicht. Muss warten auf eine neue Community Version

Geändert von MicMic (30. Mär 2021 um 16:52 Uhr) Grund: Nachtrag
  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 01: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