![]() |
ScaleFactor und Delphi 10.3 (VCL)
OK, Delphi 10.3 hat eine neue Eigenschaft für die Form eingeführt, namens "Scalefactor".
Leider hatte ich schon eine eigene DPI-Aware Lösung entwickelt, mit einer Unit, die auch eine Variable namens "Scalefactor" definiert. Ich benutzte eine Anwenderdefinierte Manifest-Datei, wo ich mit <dpiAware>true</dpiAware> die DPI-Aware-Option für das Programm aktiviere. Wenn ich nun ein solches Programm kompiliere (und ich nicht selber den Wert für Scalefactor mit Systemfunktionen abfrage), ist Scalefactor unter Delphi 10.3 immer 1, auch wenn das Programm auf einem hochauflösenden Monitor läuft. Was muss ich unter Projekt-Optionen, Manifest, einstellen, damit mir Scalefactor den richtigen Wert liefert (im vorliegenden Fall müsste es 1,25 sein)? Ich habe automatisch erzeugen versucht und egal, was ich bei DPI-Unterstützung probiere, immer ist Scalefactor = 1 Was mache ich hier falsch? |
AW: ScaleFactor und Delphi 10.3 (VCL)
Zitat:
|
AW: ScaleFactor und Delphi 10.3 (VCL)
MeinForm.ScaleFactor und auch DeinForm.Scalefactor gibt leider 1 zurück.
Aber für die Controls auf dem Form stimmt der Wert. Klick mal einen Button auf dein Form:
Delphi-Quellcode:
Da wird dir dein Programm die von dir erwarteten 1.25 zurückgeben.
procedure TForm82.Button1Click(Sender: TObject);
begin showmessage( button1.scalefactor.ToString ); end; Und wenn du dein Form mittels changescale( 5, 2 ); skalierst, wird dein Form und damit auch dein Button mit 5/2=2.5 skaliert. button1.scalefactor wird dann 1.25*5/2=3.125 zurückgeben. DeinForm.Scalefactor ist immer noch 1. (Irgendwie stimmt das ja auch ein wenig, da die Titelzeile des Formulars ja beim Skalieren nicht grösser oder kleiner wird ;-).) |
AW: ScaleFactor und Delphi 10.3 (VCL)
Wegen dieser überkomplizierten Scale-Sache halte ich mich persönlich davon einfach fern und stelle Scaled auf False.
Kann es denn nicht einfach eine Lösung geben für die man kein Mathe studiert haben muss damit es funktioniert? |
AW: ScaleFactor und Delphi 10.3 (VCL)
Ich vermute mal, daß es sich hier einfach um ein Versäumnis handelt. Ein TForm reagiert anders auf Scaling als die darin enthaltenen Controls (und das muss auch so sein). Offenbar hat man bei Einführung der ScaleFactor Eigenschaft vergessen diese auch in TForm.ChangeScale zu aktualisieren. Ich habe mir mal erlaubt, dafür einen Bugreport zu schreiben:
![]() Wofür benötigst du denn diese Information? |
AW: ScaleFactor und Delphi 10.3 (VCL)
Zitat:
|
AW: ScaleFactor und Delphi 10.3 (VCL)
Also Monitorv2 hat auch keine Auswirkung (auf den Scalefactor-Wert der Form)
Anhand des Skalierungsfaktors habe ich z.B. Zeilenhöhen von Grids, Listboxen, Fonts und Images je nach DPI angepasst. Ich verwende jetzt erstmal "uDPIAware.Scalefactor" (eben den Scalefactor-Wert aus meiner Unit). Wobei ich mir vieles von diesen Berechnungen nun anscheinend sparen kann, da Delphi das wohl selber schon macht (zumindest Listboxen, etc; bei Grafiken muss ich wohl noch selbst Hand anlegen). Aber schon mal eine super Arbeitserleichterung... |
AW: ScaleFactor und Delphi 10.3 (VCL)
Zitat:
|
AW: ScaleFactor und Delphi 10.3 (VCL)
Zitat:
|
AW: ScaleFactor und Delphi 10.3 (VCL)
Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 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