Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Bildschirmskalierung - Wie aktuelle Einstellung ermitteln? (https://www.delphipraxis.net/194014-bildschirmskalierung-wie-aktuelle-einstellung-ermitteln.html)

Cronen 6. Okt 2017 15:50

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:
Problem beim skalieren des Bildschirms
oder
Anzeigeskalierung größer 100%

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?

Steku 6. Okt 2017 16:23

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
 
Hi,

vielleicht hilft das Tutorial hier weiter: http://www.helpandmanual.com/downloads_delphi.html

Unter "A Delphi Developers Guide for 4K Displays" gibt es einen ca. 10MB großen
Download.

Grüße
Steku

Bernhard Geyer 6. Okt 2017 17:40

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.

Cronen 6. Okt 2017 18:45

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
 
im Manifest "ich kann skalieren" einstellen ist doch <dpiAware>True</dpiAware> oder?

in Verbindung mit TForm.scaled = True ?

Glados 6. Okt 2017 21:34

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 ...

EWeiss 6. Okt 2017 21:58

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:
MeineFormWeite := 1000;
MeineFormWeiteDPI := GetDpi(MeineFormWeite);
oder
Delphi-Quellcode:
ButtonWidth := 200;
ButtonHeight := 25;
SetRect(rc, 0, 0, GetDPI(ButtonWidth), GetDPI(ButtonHeight));
bye..

Cronen 7. Okt 2017 09:53

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.

Glados 7. Okt 2017 10:02

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
 
Zitat:

Was spricht eigentlich dagegen, wenn ich TForm.Scaled = FALSE setze?
Mach es doch einfach. Ich habe Scaled schon seit Jahren immer auf False. Die High-DPI-Option in den Projektoptionen ist ebenfalls deaktiviert, ein Manifest hab ich auch mit dpiAware True.
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.

Bernhard Geyer 7. Okt 2017 10:19

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:

Der Unterschied liegt "nur" darin, dass mit Manifest die Darstellung wesentlich schärfer ist.
Unscharfe Darstellung deutet darauf hin das die Anwendung von Windows Skaliert wird.

Zitat:

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.
Hab damit eigentlich keine schlechten Erfahrungen gemacht. Wir haben fast 2 Mio Quellcodezeilen und die händische Code zur Anpassung an Auflösungen <> 96dpi sind eine Handvoll zeilen. Mit Umstieg von D6 auf XE6 konnte wir einige dieser Zeilen ausbauen.
Meistens wurde bei dynamisch erstellten Controls vergessen diese passend zu Skalieren wenn dpi <> 96 ist.

haentschman 7. Okt 2017 10:32

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?
 
Moin...:P

Schaust du hier: https://forum.delphi-treff.de/index....-herausfinden/
Zitat:

Was ich nicht gemacht hatte ist, den PC nach der Umstellung neu zu starten.
Erst danach ist die Anzeige in der Registrie aktualisiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 Uhr.
Seite 1 von 2  1 2      

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