![]() |
Merkwürdige Bildschirmkoordinaten
Hallo zusammen,
ich habe ein merkwürdiges Problem. Es geht darum die Koordinaten von Fenstern zu speichern um sie beim Wiederöffnen an derselben Stelle und mit derselben Größe erscheinen zu lassen. Ich verwende 2 Bildschirme mit der nativen Auflösung von 1920x1200 Pixeln. Es ist in Windows 10 keine Skalierung eingestellt. Text 100%, Auflösung eben 1920x1200. Setze ich nun bei einem Fenster Left=0, Top=0, Width=1920 und Height=1176, so erscheint es nicht bildschirmfüllend sondern es bleiben links, rechts, oben und unten etwa 8 Pixel frei. Maximiere ich das Fenster und speichere die Koordinaten, so erhalte ich folgende Werte: Left=-8, Top=-8, Width=1936, Height=1176 (wegen Taskleiste). Das Problem tritt auch auf anderen Rechnern und mit anderen Auflösungen in unserer Firma auf, ist also nicht nur auf meinen Rechner begrenzt. Kennt jemand dieses Phänomen? Hat das etwas mit Windows- oder Bildschirmeinstellungen zu tun? |
AW: Merkwürdige Bildschirmkoordinaten
Ja, schau dir mal so ein Fenster unter Windows 10 ganz genau an. Da sieht man so einen leichten Schatten und für diesen Schatten-Effekt benötigen die diese zusätzlichen 8 Pixel rund um das Fenster.
Im Übrigen kann man bei der aktuellen Delphi IDE 10.3.2 sehen, dass Emba genau diese nicht auf dem Schirm hat. Einfach mal anschauen wohin das Icon (links oben im Fenstertitel) wenn man zwischen normaler Ansicht und Vollbild wechselt. Das sind genau diese fehlenden 8 Pixel und darum wird beim Vollbild das Icon so ganz links oben in die Ecke gequetscht. BTW Dieses Verhalten ist aber schon wesentlich älter. Damals als die Fenster noch Rahmen hatten, da war es genau diese Rahmenbreite um die die Fenster beim Vollbild verschoben/vergrößert wurden, damit der Rahmen beim Vollbild im nicht sichtbaren Bereich lag. |
AW: Merkwürdige Bildschirmkoordinaten
Hallo Schokohase,
danke für die schnelle Antwort. Habe mal den Fensterschatten in den erweiterten Systemeinstellungen abgeschaltet, was aber auch keine Änderung brachte. Das liegt dann wohl an Delphi, oder? Das heißt aber auch, dass man die Koordinaten jeweils um die 8 Pixel korrigieren könnte. Damit bekommt man es zwar hin, aber solche "Lösungen" finde ich immer etwas bedenklich. Kann einem beim nächsten Update von Windows leicht auf die Füße fallen. *grrr* Na ja, danke auf jeden Fall für die schnelle Erklärung. Grüße Uwe |
AW: Merkwürdige Bildschirmkoordinaten
Diese 8 Pixel sind eine System-Einstellung und könnten sich auch je nach Einstellung des Systems ändern.
Darum sollte man diese auch abfragen ![]() Hier mal eine Form mit 4 Shapes in den Ecken, damit man auch sehen kann, dass der Inhalt bis auf das letzte Pixel angezeigt wird. DFM:
Delphi-Quellcode:
Code:
object Form1: TForm1
Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 411 ClientWidth = 852 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False DesignSize = ( 852 411) PixelsPerInch = 96 TextHeight = 13 object Shape1: TShape Left = 0 Top = 0 Width = 65 Height = 65 Pen.Color = clRed end object Shape2: TShape Left = 0 Top = 346 Width = 65 Height = 65 Anchors = [akLeft, akBottom] Pen.Color = clRed end object Shape3: TShape Left = 787 Top = 0 Width = 65 Height = 65 Anchors = [akTop, akRight] Pen.Color = clRed end object Shape4: TShape Left = 787 Top = 346 Width = 65 Height = 65 Anchors = [akRight, akBottom] Pen.Color = clRed end object Button1: TButton Left = 360 Top = 120 Width = 75 Height = 25 Caption = 'Button1' TabOrder = 0 OnClick = Button1Click end end
Delphi-Quellcode:
Diese Metrics sind für diese Form wohl die richtigen (weil sizable und captioned).
type
TForm1 = class(TForm) Button1: TButton; Shape1: TShape; Shape2: TShape; Shape3: TShape; Shape4: TShape; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var OffsetX, OffsetY: Integer; WorkArea: TRect; begin OffsetX := GetSystemMetrics(SM_CXSIZEFRAME) + GetSystemMetrics(SM_CXPADDEDBORDER); OffsetY := GetSystemMetrics(SM_CYSIZEFRAME) + GetSystemMetrics(SM_CXPADDEDBORDER); WorkArea := Screen.MonitorFromWindow(Self.Handle).WorkareaRect; WorkArea.Inflate(OffsetX, 0, OffsetX, OffsetY); Self.Left := WorkArea.Left; Self.Top := WorkArea.Top; Self.Width := WorkArea.Width; Self.Height := WorkArea.Height; end; Man sieht trotzdem einen kleinen Unterschied zwischen echtem Vollbild und vollflächiger normaler Anzeige - beim Vollbild wird die Titelzeile kleiner dargestellt und es gibt ein paar Pixel mehr Fläche für den Inhalt. Hinweis Ich weiß nur theoretisch warum und wie es funktionieren muss. Bislang hatte ich keinen Bedarf das in einer Anwendung wirklich umzusetzen. Wenn ich hier also einen Aspekt vergessen habe, dann liegt das genau daran. |
AW: Merkwürdige Bildschirmkoordinaten
Zitat:
Oder würdest du bitte einen erstellen falls nicht? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz