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/)
-   -   SetPixelsPerInch auch für Windows 10 - die Helper... (https://www.delphipraxis.net/189715-setpixelsperinch-auch-fuer-windows-10-die-helper.html)

Papaschlumpf73 12. Jul 2016 15:24

SetPixelsPerInch auch für Windows 10 - die Helper...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin, ich habe hier eine Prozedur, die mit einer Codezeile meine gesamte VCL-Anwendung ziemlich gut skalieren kann. Manche Controls brauchen zwar etwas Nachhilfe - aber das sind kleine Ausnahmen. Nur die Windows-Dialoge (FileOpen, MessageBox usw.) haben die Standardgröße.

Funktioniert mit allen Windows-Versionen von 7 - 10 inkl. der Serverversionen.
Mit Delphi XE3 und XE8 geht's; mit Delphi 10.1 Berlin leider nicht mehr.

Habe hier schon viel im Forum gelesen - und ja: Es funktioniert mit Windows 10.

Bei Delphi 10.1 Berlin gibt es wahrscheinlich Probleme mit den Änderungen bei den Helpern. Von denen habe ich leider noch gar keine Ahnung...

Wer kann mir helfen?

Anbei ein Beispielprojekt mit XE8 erstellt. Die gewünschten PixelsPerInch können in der Projektdatei nach belieben verändert werden und wirken sich auch die ganze Anwendung aus.

jaenicke 13. Jul 2016 00:21

AW: SetPixelsPerInch auch für Windows 10 - die Helper...
 
Wie wäre es einfach so?
Delphi-Quellcode:
procedure TScreenHelper.SetPixelsPerInch(Value: Integer);
begin
  PInteger(@PixelsPerInch)^ := Value;
end;

Papaschlumpf73 13. Jul 2016 10:17

AW: SetPixelsPerInch auch für Windows 10 - die Helper...
 
So sieht es schon viel einfacher aus. Mit Delphi XE8 geht auch diese Variante. Nur wenn es mit Delphi 10.1 Berlin kompiliert wird, passiert gar nichts und die Anwendung hat die Standardauflösung... :cry:

jaenicke 13. Jul 2016 11:58

AW: SetPixelsPerInch auch für Windows 10 - die Helper...
 
Dass solche unsauberen Tricks nicht unbedingt immer weiter funktionieren, ist klar...

Warum benutzt du eigentlich nicht die normale Methode und rufst einfach ScaleBy auf? Da musst du nicht tricksen und die Methode wird offiziell unterstützt. Einzig für ein TPageControl funktioniert diese in Delphi 10.1 nicht:
https://quality.embarcadero.com/browse/RSP-14750

Papaschlumpf73 13. Jul 2016 12:55

AW: SetPixelsPerInch auch für Windows 10 - die Helper...
 
Meine Anwendung hat über 150 Formulare, welche dynamisch bei Bedarf erzeugt und auch wieder freigegeben werden. Dabei verwende ich auch viele PageControls z.B. für Assistenten-Formulare. Ich müsste jetzt für alle Formulare ScaleBy() nach der Erzeugung aufrufen. Das ging mit meiner bisherigen proc wesentlich unkomplizierter - und die PageControls hat's unter Win10 auch nicht zerschossen.

Gibt es evtl. so etwas wie Application.OnCreateForm um die ScaleBy-Aufrufe zu bündeln? Ich müsste sonst alle 150 Forms anpassen.

jaenicke 13. Jul 2016 13:34

AW: SetPixelsPerInch auch für Windows 10 - die Helper...
 
Wir haben das in alle Formulare explizit eingebaut.

Eine Alternative könnte sein, dass du einen Hook z.B. auf TCustomForm.DoShow setzt.

Papaschlumpf73 13. Jul 2016 16:02

AW: SetPixelsPerInch auch für Windows 10 - die Helper...
 
Danke. Dann werde ich wohl vorerst bei Delphi XE8 bleiben bis die Probleme mit den PageControls behoben sind.

dummzeuch 13. Jul 2016 21:30

AW: SetPixelsPerInch auch für Windows 10 - die Helper...
 
Zitat:

Zitat von Papaschlumpf73 (Beitrag 1342574)
Gibt es evtl. so etwas wie Application.OnCreateForm um die ScaleBy-Aufrufe zu bündeln? Ich müsste sonst alle 150 Forms anpassen.

Es gibt Screen.OnActiveFormChange, vielleicht hilft das weiter?


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