AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls SetPixelsPerInch auch für Windows 10 - die Helper...

SetPixelsPerInch auch für Windows 10 - die Helper...

Offene Frage von "dummzeuch"
Ein Thema von Papaschlumpf73 · begonnen am 12. Jul 2016 · letzter Beitrag vom 13. Jul 2016
Antwort Antwort
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
153 Beiträge
 
Delphi 10.4 Sydney
 
#1

SetPixelsPerInch auch für Windows 10 - die Helper...

  Alt 12. Jul 2016, 16:24
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.
Angehängte Dateien
Dateityp: zip MachMichGross.zip (56,8 KB, 31x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
8.181 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 13. Jul 2016, 01:21
Wie wäre es einfach so?
Delphi-Quellcode:
procedure TScreenHelper.SetPixelsPerInch(Value: Integer);
begin
  PInteger(@PixelsPerInch)^ := Value;
end;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
153 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 13. Jul 2016, 11:17
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...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
8.181 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 13. Jul 2016, 12:58
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
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
153 Beiträge
 
Delphi 10.4 Sydney
 
#5

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

  Alt 13. Jul 2016, 13:55
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
8.181 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 13. Jul 2016, 14:34
Wir haben das in alle Formulare explizit eingebaut.

Eine Alternative könnte sein, dass du einen Hook z.B. auf TCustomForm.DoShow setzt.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
153 Beiträge
 
Delphi 10.4 Sydney
 
#7

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

  Alt 13. Jul 2016, 17:02
Danke. Dann werde ich wohl vorerst bei Delphi XE8 bleiben bis die Probleme mit den PageControls behoben sind.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
975 Beiträge
 
Delphi 2007 Professional
 
#8

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

  Alt 13. Jul 2016, 22:30
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?
Thomas Mueller
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf