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/)
-   -   Skalierungsfaktor Win11 mit Delphi XE ermitteln (https://www.delphipraxis.net/217085-skalierungsfaktor-win11-mit-delphi-xe-ermitteln.html)

norwegen60 23. Apr 2025 20:01

Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
Hallo,

ich habe einem Laptop ein Bildschirm mit 3840 x 2400 Auflösung und die Skalierung ist auf 225% eingestellt. Jetzt möchte ich genau diese 225% mit einem Delphi XE Programm ermitteln. Dazu habe ich im Net verschiedene Möglichkeiten gefunden aber entweder sie liefen unter Delphi XE nicht oder sie liefern immer 100%
Hier zwei Möglichkeiten die 100% liefern.

Delphi-Quellcode:
laScale.Caption := format('Ratio = %1.3f', [Screen.PixelsPerInch * 100 / 96]);
Delphi-Quellcode:
var
  DC: HDC;
begin
  DC := GetDC(0);
  laScale.Caption := format('Ratio = %1.3f', [GetDeviceCaps(DC, LOGPIXELSX) / 96 *100]);
  ReleaseDC(0, DC);
end;
Hat jemand eine Idee was ich machen muss, dass mir die 225% korrekt angezeigt werden?

Vielen Dank
Gerd

Aliquis 23. Apr 2025 20:45

AW: Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
Damit habe ich auch eine Weile gekämpft, nachdem ich mir einen High-DPI-Monitor angeschafft habe. Du musst auf jeden Fall deiner Anwendung ein Manifest mitgeben, dass sie als "dpiAware" klassifiziert. Du kannst bei Manifest in den Einstellungen zu deinem Projekt aber auch "automatisch" wählen, dann sollte es auch klappen.
Gruß Georg

norwegen60 23. Apr 2025 21:02

AW: Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
Das mit den Manifest habe ich auch gelesen. Ich habe aber in Delphi XE keine entsprechende Einstellung gefunden.

Aliquis 23. Apr 2025 21:05

AW: Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
Sorry, ich habe deine Delphi-Version nicht beachtet. Vorlagen für ein entsprechendes Manifest findest du leicht im Web; du kannst es auch manuell einbinden, das geht sicher auch mit XE.

norwegen60 23. Apr 2025 21:46

AW: Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
Geschafft, wenn auch anders als gedacht. Ich hätte den Skalierungsfaktor ja benötigt, um ein mit

Delphi-Quellcode:
lPictureView := TFrxPictureView(frpStandalone.FindObject('rpim03Chart'));
  if (lPictureView <> nil) then
    lPictureView.Picture.Assign(FChart.TeeCreateMetafile(True, Rect(0, 0, Round(lPictureView.Width), Round(lPictureView.Height))));
in ein FastReport eingebundes Chart auch bei geänderter Bildschirmskalierung korrekt darzustellen.
Nachdem ich im Hauptformular die Unit XPMan eingebunden habe, war nichts weiter mehr nötig. Das Chart wird jetzt auch mit Skalierungsfaktor 225 korrekt (in voller Größe) angezeigt

Danke
Gerd

Uwe Raabe 23. Apr 2025 23:17

AW: Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
Wenn ich mich richtig erinnere, ist das einzige, was die Unit XPMan tut, ein Manifest einzubinden.

jaenicke 24. Apr 2025 06:33

AW: Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
Das ist richtig. Aber unter Delphi XE konnte man das Manifest auch schon in den Projektoptionen aktivieren, da bin ich mir sehr sicher. Standardmäßig war es auch aktiv.

norwegen60 24. Apr 2025 08:08

AW: Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von Uwe Raabe (Beitrag 1548201)
Wenn ich mich richtig erinnere, ist das einzige, was die Unit XPMan tut, ein Manifest einzubinden.

Ja, aber was mich überrascht hat, ist dass ich keine Manifest-Datei erstellen musste und auch keine habe.

Im Anhang wie der FastReport vor und nach Einbindung aussieht.
Das Problem mit der Skalierung hatte ich übrigens auch bei QuickReport. Ein Grund für den Umstieg auf FR. In QR wird aber immer noch falsch skaliert

Zitat:

Zitat von jaenicke (Beitrag 1548205)
Das ist richtig. Aber unter Delphi XE konnte man das Manifest auch schon in den Projektoptionen aktivieren, da bin ich mir sehr sicher. Standardmäßig war es auch aktiv.

Ich habe es nirgends gefunden. Nur die Laufzeit-Themes, die aber auf die Skalierung kein Einfluss hatten.

BlueStarHH 24. Apr 2025 08:16

AW: Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
Zitat:

Zitat von norwegen60 (Beitrag 1548207)
Das Problem mit der Skalierung hatte ich übrigens auch bei QuickReport. Ein Grund für den Umstieg auf FR. In QR wird aber immer noch falsch skaliert

Du musst in QuickReport eine Option setzen, dann sollte das klappen. Habe ich mal irgendwo gelesen, ich weiß leider nicht mehr wo und wie die hieß. Nur dass es sie gibt.

jaenicke 24. Apr 2025 08:43

AW: Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
Zitat:

Zitat von norwegen60 (Beitrag 1548207)
Ich habe es nirgends gefunden. Nur die Laufzeit-Themes, die aber auf die Skalierung kein Einfluss hatten.

Komisch, ich hätte gedacht, dass dass beides die notwendigen Einstellungen als Manifest ablegt.

Bei neueren Delphiversionen kann man das in den Projektoptionen besser steuern.

Dann würde ich eher ein eigenes Manifest verwenden.

himitsu 24. Apr 2025 09:47

AW: Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
Ja, in XE gibt es einen Haken in den Projekt-Optionen.

In nachfolgenden Delphis ist dort noch hinzugekommen,
dass man UAC-Modus (Administrator), DPI-Awareness und UI-Access wählen kann (außerdem wird die OS-Kompatibilität angegeben und der UI-Style/GDI-Version6 ist auch immer aktiv),
sowie, dass man dort alternativ eine eigenes Manifest-Datei angeben kann.



Ja, die Komonente TXPManifest, welche man auf die Form pappen kannte, macht nichts anderes, als die Unit einzubinden (danach kann man das nutzlose Dinge wieder löschen),
und die Unit XPMan bindet einfach nur eine Manifest-Resource eine (nur UI-Style, bzw. GDI/DLL-Version enthalten)

Natürlich kann man das alles abschalten und so oder so ein eigenes Manifest nutzen (früher und heute),
wo man, für dieses Problem hier, eben bei DPI-Awareness etwas Passendes wählt.
Alles Wichtige dazu lässt sich im Forum finden.

norwegen60 25. Apr 2025 08:17

AW: Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
OK, ich habe es eher zufällig gefunden. Man kann ins Formular die Komponente TXPManifest einbinden.
Aber wie gesagt, es hat auch gereicht im Mainform die Unit XPMan einzubinden.

jaenicke 25. Apr 2025 09:43

AW: Skalierungsfaktor Win11 mit Delphi XE ermitteln
 
Diese Komponente ist leer. Die dient nur dazu, dass die IDE automatisch diese Unit einbindet, wenn man die Komponente auf das Formular legt, wie hinitsu schon schrieb.

Interessant wäre dennoch der Vergleich der Manifeste, wenn es mit dem aus den Projektoptionen nicht geht.


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