AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Merkwürdige Bildschirmkoordinaten
Thema durchsuchen
Ansicht
Themen-Optionen

Merkwürdige Bildschirmkoordinaten

Ein Thema von Schorschi5566 · begonnen am 23. Jul 2019 · letzter Beitrag vom 23. Jul 2019
Antwort Antwort
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Merkwürdige Bildschirmkoordinaten

  Alt 23. Jul 2019, 07:29
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?
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: Merkwürdige Bildschirmkoordinaten

  Alt 23. Jul 2019, 07:39
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.

Geändert von Schokohase (23. Jul 2019 um 07:44 Uhr)
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Merkwürdige Bildschirmkoordinaten

  Alt 23. Jul 2019, 08:46
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
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#4

AW: Merkwürdige Bildschirmkoordinaten

  Alt 23. Jul 2019, 09:33
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.

Geändert von Schokohase (23. Jul 2019 um 09:36 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.815 Beiträge
 
Delphi 12 Athens
 
#5

AW: Merkwürdige Bildschirmkoordinaten

  Alt 23. Jul 2019, 19:32
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?
  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 00:25 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