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/)
-   -   ScaleFactor und Delphi 10.3 (VCL) (https://www.delphipraxis.net/198691-scalefactor-und-delphi-10-3-vcl.html)

Harry Stahl 23. Nov 2018 18:16

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?

Uwe Raabe 23. Nov 2018 18:40

AW: ScaleFactor und Delphi 10.3 (VCL)
 
Zitat:

Zitat von Harry Stahl (Beitrag 1418979)
Was muss ich unter Projekt-Optionen, Manifest, einstellen, damit mir Scalefactor den richtigen Wert liefert (im vorliegenden Fall müsste es 1,25 sein)?

Versuch doch mal "DPI-Unterstützung - Über Monitor v2".

Michael II 23. Nov 2018 22:18

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:
procedure TForm82.Button1Click(Sender: TObject);
begin
  showmessage(  button1.scalefactor.ToString );
end;
Da wird dir dein Programm die von dir erwarteten 1.25 zurückgeben.


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 ;-).)

DieDolly 23. Nov 2018 22:45

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?

Uwe Raabe 23. Nov 2018 23:11

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: ScaleFactor never changes for TForm

Wofür benötigst du denn diese Information?

Uwe Raabe 23. Nov 2018 23:15

AW: ScaleFactor und Delphi 10.3 (VCL)
 
Zitat:

Zitat von DieDolly (Beitrag 1418996)
Kann es denn nicht einfach eine Lösung geben für die man kein Mathe studiert haben muss damit es funktioniert?

Mit 10.3 funktioniert das Scaling auf unterschiedliche Monitor-DPI eigentlich schon ganz gut - auch ohne eigenes Zutun. Andererseits, ich habe tatsächlich Mathe studiert...:gruebel:

Harry Stahl 23. Nov 2018 23:22

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...

Uwe Raabe 23. Nov 2018 23:45

AW: ScaleFactor und Delphi 10.3 (VCL)
 
Zitat:

Zitat von Harry Stahl (Beitrag 1418999)
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...

Mit der TVirtualImageList wird es auch alles etwas leichter. Die kümmert sich je nach Verfügbarkeit um die Auswahl der passenden Größe oder skaliert das Bildchen entsprechend selbst.

DieDolly 24. Nov 2018 00:22

AW: ScaleFactor und Delphi 10.3 (VCL)
 
Zitat:

Mit der TVirtualImageList wird es auch alles etwas leichter.
Ich habe kürzlich auf die PngImageList gewechselt. Hat die denn mit der TImageCollection noch einen Wert?

EWeiss 24. Nov 2018 04:50

AW: ScaleFactor und Delphi 10.3 (VCL)
 
Zitat:

Zitat von DieDolly (Beitrag 1419002)
Zitat:

Mit der TVirtualImageList wird es auch alles etwas leichter.
Ich habe kürzlich auf die PngImageList gewechselt. Hat die denn mit der TImageCollection noch einen Wert?

Finde es doch heraus ;)

gruss


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