Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Merkwürdige Bildschirmkoordinaten (https://www.delphipraxis.net/201447-merkwuerdige-bildschirmkoordinaten.html)

Schorschi5566 23. Jul 2019 07:29

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?

Schokohase 23. Jul 2019 07:39

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.

Schorschi5566 23. Jul 2019 08:46

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

Schokohase 23. Jul 2019 09:33

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
https://docs.microsoft.com/en-us/win...tsystemmetrics

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:
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
Code:
Delphi-Quellcode:
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;
Diese Metrics sind für diese Form wohl die richtigen (weil sizable und captioned).

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.

TurboMagic 23. Jul 2019 19:32

AW: Merkwürdige Bildschirmkoordinaten
 
Zitat:

Zitat von Schokohase (Beitrag 1437385)
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.

Gibt's dazu schon einen QP Report?
Oder würdest du bitte einen erstellen falls nicht?


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