Delphi-PRAXiS

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

Uwe Raabe 24. Nov 2018 09:21

AW: ScaleFactor und Delphi 10.3 (VCL)
 
Zitat:

Zitat von DieDolly (Beitrag 1419002)
Ich habe kürzlich auf die PngImageList gewechselt. Hat die denn mit der TImageCollection noch einen Wert?

Einer der Vorteile der PngImageList ist, daß sie halt schon seit etlichen Delphi-Versionen verfügbar ist. Dazu hat sie in den meisten Fällen auch eine bessere Darstellung bei Verwendung von Alpha-Channel Icons - nämlich wenn diese nicht über das HIMAGELIST Interface gezeichnet werden, sondern von der Imagelist selbst. Im High-DPI Bereich hat sie aber dieselben Nachteile wie die Standard-TImageList (dafür habe ich aber auch schon was in der Pipeline). Ich bin selbst noch nicht sicher, wie ich damit in der nächsten Zeit umgehen werde. Eventuell muss man auch erst noch ein paar Verbesserungen an der TVirtualImageList/TImageCollection abwarten. Insbesondere beim automatischen Import von TPngImageList gibt es noch Optimierungsmöglichkeiten.

Whookie 24. Nov 2018 09:37

AW: ScaleFactor und Delphi 10.3 (VCL)
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1419007)
... (dafür habe ich aber auch schon was in der Pipeline)...

Berücksichtigst du dabei auch verschiedene Themes?

Uwe Raabe 24. Nov 2018 09:51

AW: ScaleFactor und Delphi 10.3 (VCL)
 
Zitat:

Zitat von Whookie (Beitrag 1419010)
Berücksichtigst du dabei auch verschiedene Themes?

Was meinst du damit?

Whookie 24. Nov 2018 10:10

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.

Uwe Raabe 24. Nov 2018 11:40

AW: ScaleFactor und Delphi 10.3 (VCL)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Whookie (Beitrag 1419014)
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.

Leider ist die Entscheidung nach Hell oder Dunkel bei den Styles nicht eindeutig zu treffen und hängt entscheidend von den in den Icons verwendeten Farben ab. Meine Idee ist eher, einen einfachen Mechanismus zu schaffen, die aktuell verwendete ImageList dynamisch umzuschalten. Das kann die Größe betreffen, unabhängig vom aktuellen DPI Wert (große oder kleine Toolbar Buttons), aber eben auch die Kompatibilität mit dem aktuellen Style.

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.

DieDolly 24. Nov 2018 12:32

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.

Uwe Raabe 24. Nov 2018 12:44

AW: ScaleFactor und Delphi 10.3 (VCL)
 
Zitat:

Zitat von DieDolly (Beitrag 1419018)
Ne lieber nicht. Zuviel Aufwand

Wer nicht wagt, der nicht gewinnt...

DieDolly 24. Nov 2018 13:12

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')];

Uwe Raabe 24. Nov 2018 13:33

AW: ScaleFactor und Delphi 10.3 (VCL)
 
Zitat:

Zitat von DieDolly (Beitrag 1419025)
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.

Kannst du mal einen Link zu der besagten Seite posten? Ich kann dir im Moment nicht so ganz folgen.

DieDolly 24. Nov 2018 13:34

AW: ScaleFactor und Delphi 10.3 (VCL)
 
http://docwiki.embarcadero.com/RADSt...What's_New

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 15:18 Uhr.

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