![]() |
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 |
AW: ScaleFactor und Delphi 10.3 (VCL)
Zitat:
|
AW: ScaleFactor und Delphi 10.3 (VCL)
Zitat:
|
AW: ScaleFactor und Delphi 10.3 (VCL)
Zitat:
|
AW: ScaleFactor und Delphi 10.3 (VCL)
Ich verwende PngImageList und für jeden Style den ich verwende, registriere ich für jede ImageList eine passende Version (meist reicht es Grafiken für "helle" und für "dunkle" Themes zu haben). Wenn ich zukünftig unterschiedliche Auflösungen berücksichtigen möchte könnte natürlich deine Lösung verwenden, aber die Idee, das die Liste selbst auch einen "umschaltbaren" Style bietet finde ich gerade sehr attraktiv.
|
AW: ScaleFactor und Delphi 10.3 (VCL)
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich habe mal einen Zwischenstand angehängt. Die im Beispiel gezeigte Umschaltung der Icon-Größe sollte auch für ein Austauschen der Icons bei Style-Wechsel gehen. Bei TVirtualImageList würde man einfach die ImageCollection wechseln, aber das habe ich noch nicht ausprobiert. |
AW: ScaleFactor und Delphi 10.3 (VCL)
Ne lieber nicht. Zuviel Aufwand und außerdem ist die Erklärung auf der E-Seite wofür TVirtualImageList ist nichts sagend.
|
AW: ScaleFactor und Delphi 10.3 (VCL)
Zitat:
|
AW: ScaleFactor und Delphi 10.3 (VCL)
Dafür müsste ich erstmal den text auf E verstehen. Ich sehe keinen Vorteil gegenüber deiner PngImageList.
Außerdem verstehe ich die Anwendung nicht.
Delphi-Quellcode:
Image1.Picture.Icon := ImageCollection1.Images.Items[ImageCollection1.GetIndexByName('icon')];
|
AW: ScaleFactor und Delphi 10.3 (VCL)
Zitat:
|
AW: ScaleFactor und Delphi 10.3 (VCL)
![]() Was ich bisher so gesehen habe... die neue ImageList scheint sowas zu sein wie deine PngList wo die Helper (Name by ID) schon integriert sind. Würde sie sofort testen aber komme nicht klar damit und weiß nicht wie ich ein Icon zurückliefere geschweige denn ein Handle. Ich mache dafür ein neues Thema. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:20 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