Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fenster innerhalb Monitor halten (https://www.delphipraxis.net/211551-fenster-innerhalb-monitor-halten.html)

freimatz 1. Okt 2022 11:43

Fenster innerhalb Monitor halten
 
Hallo,
ich habe hier ein Fenster - sehr alt - das ändert seine Höhe selber. Dabei wird noch geprüft ob Top<0 ist und dann eben auf 0 gesetzt. Nun ist bei meinem zweiten Monitor der obere Rand nicht 0 sondern mehr. Das Fenster ist also ausserhalb und nur noch teilweise zu sehen.
Ich könnte das nun selber irgendwie lösen (mit Screen.Monitors etc.). Aber ich möchte nicht das Rad neu erfinden und frage Euch nun nach Best Practices oder standardisierten Methoden.

Uwe Raabe 1. Okt 2022 12:12

AW: Fenster innerhalb Monitor halten
 
Vielleicht wäre MakeFullyVisible hilfreich.

himitsu 1. Okt 2022 12:24

AW: Fenster innerhalb Monitor halten
 
Die TForm hat ein Property Monitor, das ist der Monitor, wo die Form zum Großteil (Width>50% und Height>50%) trauf ist, also genau der, welcher dich interessiert.


PS: Nicht Left/Top/Width/Height aka BoundsRect, sondern WorkareaRect prüfen, das ist der wirklich nutzbare Bereich, ohne so Dinge wie die Startleiste und andere Sidebars.




Ach ja, MakeFullyVisible hat ein kleines Problemchen.
Es beachtet die unsichtbaren Border (Windows 10/11) und somit ist ein Bereich am Rand der Workarea nicht nutzbar. :stupid:

Und da nur die Position und nicht die Fenstergröße angepasst wird, hast du Spaß, wenn das Fenster zu groß ist, z.B. bei Maximiert. :freak:

[ADD]
OK, ein Problem behoben, aber nicht richtig getestet, sonst wäre das Andere doch aufgefallen. :gruebel:
https://quality.embarcadero.com/brow...ullyVisible%22


[ADD2]
https://quality.embarcadero.com/browse/RSP-39587

Ein Maximiertes Fenster liegt auf Position -8:-8 und ist 16 Pixel Breiter/Höher, als das sichtbare Fenster.
Delphi-Quellcode:
procedure TForm11.Timer2Timer(Sender: TObject);
begin
  Caption := Format('%d:%d-%d:%d %d', [Left, Top, Width, Height, BorderWidth])
end;

freimatz 1. Okt 2022 18:55

AW: Fenster innerhalb Monitor halten
 
Zitat:

Zitat von himitsu (Beitrag 1512771)
Die TForm hat ein Property Monitor, das ist der Monitor, wo die Form zum Großteil (Width>50% und Height>50%) trauf ist, also genau der, welcher dich interessiert.

Nur wenn ich das selber machen wollte. Will ich aber nicht, möchte nicht "das Rad neu erfinden" :-D
(Aktuell ist das eh nur ein Dialogfenster, da dürften die erwähnten Probnlem keine Rolle spielen.)

MakeFullyVisible? :shock: - Uwe Danke!
Seit wann gibt es das denn?

himitsu 1. Okt 2022 19:29

AW: Fenster innerhalb Monitor halten
 
da der erste BugReport aus dem Jahre 2015 ist ... seit gestern? :stupid:


Lol, das ist ja mal witzig.

Ein Timer mit Interval=1, da
Delphi-Quellcode:
BoundsRect := TRect.Intersect(BoundsRect, Monitor.WorkareaRect);
rein
und dann mal die Form schnell auf dem Desktop über den Rändern hin und her rumschieben.

Bin ich der Einzige, der da plötzlich in der Form sich ein Windows XP verstecken sieht? (Windows 10)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:46 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