![]() |
Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
Ich mochte beim Start einer Anwendung prüfen, wie die aktuelle Bildschirmskalierung (Win 10) eingestellt ist (also 100% / 125% / 150%).
Mit meiner Suche landete ich ua. bei folgenden Beiträgen: ![]() oder ![]() Die dort gezeigten Lösungen zeigen mr aber immer 96 an egal bei welcher Skalierung. Die Google-Suche führt mich immer zur Registry HKEY_CURRENT_USER\Control Panel\Desktop\Win8DpiScaling od. ..\WindowMetrics\AppliedDPI Auch hier lande ich immer bei unveränderten Werten. Kann mir jemand sagen, wo konkret die Einstellung hinterlegt ist bzw. wie ich die Abfrage? |
AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
Hi,
vielleicht hilft das Tutorial hier weiter: ![]() Unter "A Delphi Developers Guide for 4K Displays" gibt es einen ca. 10MB großen Download. Grüße Steku |
AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
kann es sein das deine Anwendung ohne ein passendes Manifest läuft das sagt "Ich kann richtig Skalieren"?
Wenn du das nicht hast wird dir Windows eine 96dpi-Einstellung vorgaugeln und alle Skalierungsarbeiten selbst durchführen. |
AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
im Manifest "ich kann skalieren" einstellen ist doch <dpiAware>True</dpiAware> oder?
in Verbindung mit TForm.scaled = True ? |
AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
Hilft dir das vielleicht weiter?
Delphi-Quellcode:
DPI := Screen.PixelsPerInch * 100 div 96;
if DPI >= 150 then // else if DPI >= 125 then // else if ... |
AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
Delphi-Quellcode:
var
ratio: single;
Delphi-Quellcode:
function GetDPI(nPix: LongInt): LongInt;
var DC: HDC; begin if ratio = 0 then begin DC := GetDC(0); ratio := GetDeviceCaps(DC, LOGPIXELSX) / 96.0; ReleaseDC(0, DC); end; result := round(nPix * ratio); end;
Delphi-Quellcode:
oder
MeineFormWeite := 1000;
MeineFormWeiteDPI := GetDpi(MeineFormWeite);
Delphi-Quellcode:
bye..
ButtonWidth := 200;
ButtonHeight := 25; SetRect(rc, 0, 0, GetDPI(ButtonWidth), GetDPI(ButtonHeight)); |
AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
So ich hab mich dann heute morgen wieder an das Thema ran gewagt.
Zunächst mal Danke für die Antworten. Aber leider komme ich nicht weiter. Egal wie ich bekomme - ob mit manifest oder ohne - immer die 96 DPI angezeigt. Der Unterschied liegt "nur" darin, dass mit Manifest die Darstellung wesentlich schärfer ist. Was spricht eigentlich dagegen, wenn ich TForm.Scaled = FALSE setze? So wie ich das sehe, bleibt die Form immer gleich - unabhängig von der einestellten Skalierung. |
AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
Zitat:
Dann noch obigen Code von mir und alles wird von XP bis Windows 10 korrekt berechnet. Ich habe diesen ganzen Auto-Scale-Krims-Krams auf False, da er so oder so nicht immer das macht was er soll. Meine Formulare werden alle, je nach DPI, händisch (im Code) angepasst. Das sieht erstens besser aus und zweitens hat man so die volle Kontrolle und ist nicht von irgendwelchen DPI-Optionen abhängig. |
AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
Hat dein Manifest auch die nötige supportedOS-Eintrag (für Win10 wäre das <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />).
MS ist ja auf die glorreiche Idee gekommen mit jeder Windows-Version seit Vista einen neuen Eintrag nötig zu machen. Du musstest also alle 2-3 Jahre einen Eintrag ergänzen damit deine Anwendung nicht wieder von Windows Skaliert wurde. Zitat:
Zitat:
Meistens wurde bei dynamisch erstellten Controls vergessen diese passend zu Skalieren wenn dpi <> 96 ist. |
AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
Moin...:P
Schaust du hier: ![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 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