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/)
-   -   Mit Delphi den Skalierungsfaktor herausfinden (https://www.delphipraxis.net/191954-mit-delphi-den-skalierungsfaktor-herausfinden.html)

ShortAnni 7. Mär 2017 10:30

Mit Delphi den Skalierungsfaktor herausfinden
 
Hallo,

ich habe mal wieder ein kleines Problem.

Ich möchte mit Delphi herausfinden welche Skalierung in Windows (100%, 125%, 150%) eingestellt ist. Zumindest für den primären Monitor.
Hat jemand eine Idee wie man das macht.

LG Anni

Sherlock 7. Mär 2017 10:34

AW: Mit Delphi den Skalierungsfaktor herausfinden
 
Ich hatte da mal das hier gefunden und für mich folgendes rausgezogen:

Delphi-Quellcode:
function TPaintingGrid.SetScreenDPIandScale(const Context: TFmxObject = nil):
  Boolean;
var
  DeviceBehavior: IDeviceBehavior;
  DisplayMetrics: TDeviceDisplayMetrics;
{$IFDEF ANDROID}
  dm: JDisplayMetrics;
{$ENDIF}
begin
  Result := False;
{$IFDEF ANDROID}
  dm := GetJDisplayMetrics;
  if dm <> nil then
  begin
    fppi := dm.densityDpi;
    fScale := dm.scaledDensity;
    Result := True;
    exit;
  end;
{$ENDIF}
  if TBehaviorServices.Current.SupportsBehaviorService(IDeviceBehavior,
    DeviceBehavior, Context) then
  begin
    DisplayMetrics := DeviceBehavior.GetDisplayMetrics(Context);
    fScale := DisplayMetrics.ScreenScale;
    fppi := DisplayMetrics.PixelsPerInch; // / (fScale * fScale);
    fScreenWidth := DisplayMetrics.LogicalScreenSize.Width;
    Result := True;
  end;
end;
Sherlock

t.roller 7. Mär 2017 10:48

AW: Mit Delphi den Skalierungsfaktor herausfinden
 
Ab WIN8.1:
GetScaleFactorForMonitor

ShortAnni 7. Mär 2017 11:12

AW: Mit Delphi den Skalierungsfaktor herausfinden
 
Super, ich danke euch. Ich werde das gleich mal probieren.

LG Anni

Uwe Raabe 7. Mär 2017 11:40

AW: Mit Delphi den Skalierungsfaktor herausfinden
 
Dies sollte auch gehen:

Delphi-Quellcode:
result := Round(Screen.PrimaryMonitor.PixelsPerInch*100/96); // ganze Prozent


Ist auch leicht auf alle Monitore zu erweitern.

t.roller 7. Mär 2017 13:51

AW: Mit Delphi den Skalierungsfaktor herausfinden
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1363414)
Dies sollte auch gehen:

Delphi-Quellcode:
result := Round(Screen.PrimaryMonitor.PixelsPerInch*100/96); // ganze Prozent
Ist auch leicht auf alle Monitore zu erweitern.

XE7 kennt Screen.PrimaryMonitor.PixelsPerInch nicht.
Ersatz:
Delphi-Quellcode:
  caption:= INTTOSTR(ROUND(Screen.PixelsPerInch*100/96))+' %';
Zeigt bei WIN8.1 richtig an: 100% bzw. 125%

jaenicke 7. Mär 2017 15:23

AW: Mit Delphi den Skalierungsfaktor herausfinden
 
Aber Vorsicht, die von t.roller genannte Funktion gibt es nicht ohne Grund. Ab Windows 8 kann jeder Monitor auch eine eigene Skalierung haben.
Die beiden Full HD 24" Monitore links und rechts haben bei mir z.B. 100%, der 27" QHD Monitor in der Mitte aber 125%.

Uwe Raabe 7. Mär 2017 15:40

AW: Mit Delphi den Skalierungsfaktor herausfinden
 
Zitat:

Zitat von jaenicke (Beitrag 1363434)
Aber Vorsicht, die von t.roller genannte Funktion gibt es nicht ohne Grund. Ab Windows 8 kann jeder Monitor auch eine eigene Skalierung haben.
Die beiden Full HD 24" Monitore links und rechts haben bei mir z.B. 100%, der 27" QHD Monitor in der Mitte aber 125%.

Deswegen kann man das ja auch über
Delphi-Quellcode:
Screen.Monitor[I]
für jeden einzelnen Monitor abfragen.

uligerhardt 9. Mai 2017 08:57

AW: Mit Delphi den Skalierungsfaktor herausfinden
 
Hallo!

Ich kämpfe auch gerade mit dem Thema. Da ich auf D2007 festgenagelt bin, kann ich die neuen, monitorspezifischen APIs nicht (ohne Weiteres) nehmen. Aber wenn ich meine beiden Monitore (Laptop und extern) auf 125% gestellt habe, sollten Screen.PixelsPerInch und GetDeviceCaps(DC, LOGPIXELSX) doch 120 ergeben? Ich kriege aber bei beiden 96. Ich habe in Windows 10 die Einstellung "Größe von Text, Apps und anderen Elementen ändern" genommen - das ist die Variante, die sofort, ohne Neuanmeldung, wirkt.

SProske 9. Mai 2017 09:01

AW: Mit Delphi den Skalierungsfaktor herausfinden
 
Zitat:

Zitat von uligerhardt (Beitrag 1370680)
Ich habe in Windows 10 die Einstellung "Größe von Text, Apps und anderen Elementen ändern" genommen - das ist die Variante, die sofort, ohne Neuanmeldung, wirkt.

Ich hatte damit auch mal zu kämpfen und glaube mich zu erinnern, dass man - egal wie eingestellt - immer erst den Rechner neu starten musste, bevor das auch das Delphi-Programm mitbekam.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:18 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