![]() |
FMX IFMXScreenService GetScreenScale
Moin zusammen,
ich benötige die Skalierung des Monitor in Firemonkey. Und zwar von dem, auf dem die Anwendung läuft. Ich nutze zur Zeit folgendes:
Code:
Ich habe 3 Monitore. Einer hat 100% und die anderen 150%. Der Primary Monitor ist 150%
FMXScreenService := IFMXScreenService( TPlatformServices.Current.GetPlatformService(IFMXScreenService));
FMXDisplayService := IFMXMultiDisplayService( TPlatformServices.Current.GetPlatformService(IFMXMultiDisplayService)); CurrentDisplay := FMXDisplayService.DisplayFromWindow( MeineMainForm.Handle); CurrentScreenScale := FMXScreenService.GetScreenScale; Ich kann mit FMXDisplayService.DisplayFromWindow(MeineMainForm. Handle) den aktuellen Monitor ermitteln. Aber wie bekomme ich die Skalierung? Eine Property ist nicht vorhanden und beim ScreenService bekomme ich immer 150%, egal auf welchem Monitor die Anwendung läuft. Wie kann ich FMXScreenService beibringen, "meinen" Monitor zu untersuchen? Danke VG Thomas |
AW: FMX IFMXScreenService GetScreenScale
So wie es aussieht hat FireMonkey noch nicht mitbekommen dass man unter Windows (seit ca sechseinhalb Jahren) unterschiedliche DPIs auf verschiedenen Monitoren haben kann:
![]() |
AW: FMX IFMXScreenService GetScreenScale
aufgerufen wird dieses:
Delphi-Quellcode:
Die Funktion beschrieben ist hier:
function GetDCScale(const DC: HDC): Single;
begin Result := GetDeviceCaps(DC, LOGPIXELSX) / StandardDpi; end; ![]() aber auch dort wird für alle Displays der selbe Wert ausgegeben Zitat:
|
AW: FMX IFMXScreenService GetScreenScale
Wenn ich fest von Windows als Plattform ausgehe, kann ich dieses nutzen:
Delphi-Quellcode:
CurrentScreenScale := WindowHandleToPlatform( MeinMainForm.Handle).Scale;
Kenn jemand ein Interface, welches diese Funktion entsprechend kapselt? |
AW: FMX IFMXScreenService GetScreenScale
Ich persönlich nutze eine andere Variante, weil GetScreenScale nur beim ersten Display funktioniert. Elegant ist anders, aber es funktioniert:
Delphi-Quellcode:
osScale:=1.00;
if ((currentDisplay=0) and (TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(service)))) then begin osScale:=service.GetScreenScale; end else begin if (lastWindowState<>TWindowState.wsMaximized) then self.WindowState:=TWindowState.wsMaximized; try osScale:=Screen.Displays[currentDisplay].BoundsRect.Width / self.Width; except on E: Exception do begin osScale:=1; end; end; if (lastWindowState<>TWindowState.wsMaximized) then self.WindowState:=TWindowState.wsNormal; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 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