![]() |
Bildschirm Auflösung
Hi Delphianer
Ich versuche gerade die aktuelle Auflösung an meinem Monitor anzuzeigen. Momentan ist die auf 3840x2160 ist ein 4K Monitor. Wenn ich mit meiner Funktion diese versuche anzuzeigen bekomme ich 3072x1728
Delphi-Quellcode:
hat wer ne Ahnung worann das liegen kann.
function ScreenRes: string;
begin Result := String(inttostr(GetSystemMetrics(SM_CXSCREEN))) + 'x' + String(inttostr(GetSystemMetrics(SM_CYSCREEN))); end; Grüsse Zodi |
AW: Bildschirm Auflösung
Also mit screen.widht und screen.height bekomme ich die gleichen Werte.
ich habe nur einen Monitor angeschlossen |
AW: Bildschirm Auflösung
Schaut euch mal TScreen genauer an. Soweit ich im Kopf habe, kann man darüber
die Auflösung aller Bildschirme abfragen. Stichwort: Array! ;-) Screen[0].Width, Screen[1].Width und vermutlich Screen.Count oder .MonitorCount... Grüße TurboMagic |
AW: Bildschirm Auflösung
scheint auch mit Tscreen nicht zu funktionieren. :(
|
AW: Bildschirm Auflösung
Ist vielleicht eine Bildschirmskalierung eingestellt und die wird da evtl. berücksichtigt?
Mal in den Bildschirmeinstellungen von Windows nachschauen und umrechnen, ob ein dort eingestellter Skalierungsfaktor rechnerisch diese Differenz erklärt? |
AW: Bildschirm Auflösung
3072 * 1,25 = 3840.
1728 * 1,25 = 2160. -> Skalierung von 125% ist eingestellt. |
AW: Bildschirm Auflösung
Hallo Zodi
ich weiss nicht, mit welcher Delphi Version du arbeitest. In den neueren kannst du unter Projekt > Optionen > Manifest > DPI Unterstützung einstellen, wie sich dein Programm und Windows punkto der unter Windows eingestellten Skalierung verhalten sollen. (In älteren Delphi Versionen musst du die Manifest Datei anpassen.) Ein Beispiel. Dein Programmfenster habe eine Grösse von 600x400. Wenn du "Keine" DPI Unterstützung auswählst und du unter Windows eine Skalierung von 125% eingestellt hast, dann wird Windows dein Fenster um diesen Faktor vergrössert (und dadurch etwas unscharf) darstellen. Auf dem Bildschirm wird dein Fenster also 600x1.25=750 breit und 400x1.25=500 Monitorpixel hoch angezeigt. Wenn du aber in deinem Programm Breite und Höhe abfragst, werden immer noch 600 bzw. 400 zurückgegeben. Hätte eines deiner Fenster eine Grösse von 3072x1728, dann würde es auf dem Monitor 3072x1.25 breit und 1728x1.25 hoch dargestellt (3840x2160); wenn du Breite und Höhe in deinem Programm abfragst, dann werden 3072 bzw. 1728 zurück gegeben. Genau gleich verhält es sich mit den Screen Werten. Wenn du unter DPI Unterstützung hingegen zum Beispiel "über Monitor v2" wählst, dann bist du verantwortlich fürs Skalieren des Fensters. Windows wird dein Fenster nicht skalieren. Dein 600x400 Fenster wird 600x400 Monitorpixel gross dargestellt, wenn du keine Korrektur vornimmst. Wenn du jetzt die Screen Werte abfragst, wirst du 3840x2160 zurück erhalten. |
AW: Bildschirm Auflösung
Guten Tag, auf
![]()
Delphi-Quellcode:
Damit noch eine möglich aufgezeigt wird :)
var
MonInfo: TMonitorInfo; begin MonInfo.cbSize := SizeOf(MonInfo); GetMonitorInfo(MonitorFromWindow(Handle, MONITOR_DEFAULTTONEAREST), @MonInfo); ShowMessage(Format('Current resolution: %dx%d', [MonInfo.rcMonitor.Right - MonInfo.rcMonitor.Left, MonInfo.rcMonitor.Bottom - MonInfo.rcMonitor.Top])); Ps: Dies sollte nur den Hauptmonitor betreffen, ist aber anpassbar. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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 by Thomas Breitkreuz