AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?

Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?

Ein Thema von Cronen · begonnen am 6. Okt 2017 · letzter Beitrag vom 7. Okt 2017
Antwort Antwort
Seite 1 von 2  1 2   
Cronen

Registriert seit: 5. Sep 2003
Ort: Hannover
61 Beiträge
 
Delphi 10.3 Rio
 
#1

Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?

  Alt 6. Okt 2017, 15:50
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?
  Mit Zitat antworten Zitat
Steku

Registriert seit: 12. Mai 2008
181 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?

  Alt 6. Okt 2017, 16:23
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?

  Alt 6. Okt 2017, 17:40
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Cronen

Registriert seit: 5. Sep 2003
Ort: Hannover
61 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?

  Alt 6. Okt 2017, 18:45
im Manifest "ich kann skalieren" einstellen ist doch <dpiAware>True</dpiAware> oder?

in Verbindung mit TForm.scaled = True ?
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#5

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?

  Alt 6. Okt 2017, 21:34
Hilft dir das vielleicht weiter?

Delphi-Quellcode:
DPI := Screen.PixelsPerInch * 100 div 96;
if DPI >= 150 then
 //
else if DPI >= 125 then
 //
else if ...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?

  Alt 6. Okt 2017, 21:58
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..

Geändert von EWeiss ( 6. Okt 2017 um 22:04 Uhr)
  Mit Zitat antworten Zitat
Cronen

Registriert seit: 5. Sep 2003
Ort: Hannover
61 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?

  Alt 7. Okt 2017, 09:53
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.
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#8

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?

  Alt 7. Okt 2017, 10:02
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?

  Alt 7. Okt 2017, 10:19
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.288 Beiträge
 
Delphi 12 Athens
 
#10

AW: Bildschirmskalierung - Wie aktuelle Einstellung ermitteln?

  Alt 7. Okt 2017, 10:32
Moin...

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:00 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