Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie kann ich beim Installieren die DPI Eigenschaften setzen? (https://www.delphipraxis.net/214844-wie-kann-ich-beim-installieren-die-dpi-eigenschaften-setzen.html)

TigerLilly 18. Mär 2024 17:00

Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Ich habe eine Legacy App, die nicht DPI aware ist + auf hochauflösenden Bildschirmen mit >100% Skalierung uU winzig klein angezeigt wird. Über Anklicken des Programm-Icons/Eigenschaften/Kompatibilität/Hohe DPI EInstellungen ändern - auf System(erweitert) setzen kann man das entschärfen.

Meine Frage: Wie kann ich das schon beim Installieren setzen oder kann ich das in der EXE selbst schon festlegen?

Danke jede Antwort!

himitsu 18. Mär 2024 17:05

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Was hast du denn in den Projektoptionen eingestellt?

Optionen -> Anwendung -> Manifest

TigerLilly 18. Mär 2024 17:12

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
"Legacy" = Delphi 2006, da gibt es das leider noch nicht.

Uwe Raabe 18. Mär 2024 17:40

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Zitat:

Zitat von TigerLilly (Beitrag 1534796)
Ich habe eine Legacy App, die nicht DPI aware ist + auf hochauflösenden Bildschirmen mit >100% Skalierung uU winzig klein angezeigt wird.

Das ist aber ungewöhnlich, denn:
Zitat:

By default, the system considers desktop applications DPI unaware
Insofern muss ja irgendetwas dem Windows sagen, dass die App eben nicht als DPI unaware angesehen werden soll. Das würd ich erstmal versuchen herauszufinden.

TigerLilly 18. Mär 2024 17:51

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1534800)
Zitat:

Zitat von TigerLilly (Beitrag 1534796)
Ich habe eine Legacy App, die nicht DPI aware ist + auf hochauflösenden Bildschirmen mit >100% Skalierung uU winzig klein angezeigt wird.

Das ist aber ungewöhnlich, denn:
Zitat:

By default, the system considers desktop applications DPI unaware
Insofern muss ja irgendetwas dem Windows sagen, dass die App eben nicht als DPI unaware angesehen werden soll. Das würd ich erstmal versuchen herauszufinden.

Das verstehe ich nicht. Vielleicht verwende ich die Vokabel falsch. Die App wird auch einem 4k Monitor mit 150% Skalierung winzig klein angezeigt. Das hätte ich als DPI unaware bezeichnet.
Deshalb der Workaround mit den Einstellungen und "Hohe DPI Skalierung überschreiben" auf "System (erweitert)" stellen. Dann wird die App vom System auf 150% skalierte, zwar unscharf, aber lesbar.
Und ja: Genau diesen Schritt würde ich gern automatsieren bzw der App schon mitgeben. Ich hätte da das Manifest als Ausgangspunkt gesehen.

Uwe Raabe 18. Mär 2024 17:58

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Zitat:

Zitat von TigerLilly (Beitrag 1534801)
Die App wird auch einem 4k Monitor mit 150% Skalierung winzig klein angezeigt. Das hätte ich als DPI unaware bezeichnet.

Das ist es ja auch. Allerdings sorgt Windows von Haus aus für diese Skalierung, wenn die Applikation sich nicht als DPI aware ausgibt. Das geht entweder durch ein Manifest oder per Programmcode. Wenn beides nicht vorliegt, dann betrachtet Windows die Applikation als DPI unaware und kümmert sich selbst um die Skalierung. In deinem Fall ist das offenbar nicht so und man muss herausfinden warum.

Es gibt unzählige dieser alten Anwendungen und alle laufen auf 4k Monitoren ohne Probleme - wenn auch etwas unscharf. Man muss also diese Einstellung nicht bei jeder dieser Apps machen. Warum dann in deinem Fall?

TigerLilly 18. Mär 2024 18:28

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1534802)
Man muss also diese Einstellung nicht bei jeder dieser Apps machen. Warum dann in deinem Fall?

Gute Frage. Keine Ahnung. Was mache ich: D2006 kompilieren und signieren. Installation mit Inno-Setup.

himitsu 18. Mär 2024 19:18

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Grundsätzlich kann man sich das Manifest auch selbst erstellen und als Ressource einbinden.

So alte Delphis kennen viele Dinge noch nicht.
Seit XP gibt es zwar dieses Manifest, aber es hat über die Jahre viele Funktionen dazu bekommen.
* Kontrolle über DPI und Skalierung
* Angabe, zu welcher Windows-Version dein Programm kompatibel ist. Ansonsten entscheidet Windows, ob und welche Virtualisierungen/Umleitungen/Funktionen deinem Programm zur Verfügung stehen.
* uvm.

https://learn.microsoft.com/de-de/wi...at-windows-8-1
https://learn.microsoft.com/de-de/wi...tion-manifests

Uwe Raabe 18. Mär 2024 21:14

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Zitat:

Zitat von TigerLilly (Beitrag 1534805)
Gute Frage. Keine Ahnung. Was mache ich: D2006 kompilieren und signieren. Installation mit Inno-Setup.

Du könntest prüfen, ob deine Anwendung eine Manifest-Ressource enthält und was da drin steht. Das Manifest kann auch als eigenständige Datei mit Endung .manifest neben der exe liegen. Hier gibt's mehr Informationen dazu: https://learn.microsoft.com/en-us/wi...tion-manifests

Führt das nicht zum Erfolg müssen weitersuchen.

Hast du mal versucht, die Anwendung umzubenennen?

Michael II 19. Mär 2024 00:33

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Wie erwähnt wurde: Wenn deine App alt ist, dann ist sie DPI unaware und dann skaliert Windows die Fenster gemäss der eingestellten Skalierung. Ändere doch diese und prüfe was passiert.

Via Windows Task Manager siehst du, welcher DPI Mode verwendet wird. Dort unter Details, Spalte DPI hinzufügen; deine .exe suchen.

Eventuell hast du irgendwann einmal nach Rechtsklick auf die .exe unter Eigenschaften die DPI Einstellungen verändert (?).

Es wäre sicher auch nützlich zu prüfen, ob doch ein Mainfest eingebaut ist.
Dies kannst du (falls in .exe eingebaut) zum Beispiel via Sysinternals
sigcheck -m <deine.exe> tun.
Mehr Infos dazu findest du hier.

TigerLilly 19. Mär 2024 07:22

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Neu kompiliert + nicht signiert etc:

Task-Manager sagt: Unbekannt in der Spalte DPI.

Sysinternals gibt aus:
Code:
        Verified:      Unsigned
        Link date:     23:22 19.06.1992
        Publisher:     n/a
        Company:       dato Denkwerkzeuge
        Description:   nut.s nutritional.software
        Product:       n/a
        Prod version:  1.0.0.0
        File version:  1.0.0.45
        MachineType:   32-bit
Und das Phänomen gibt es ja auch auf den Kunden-PCs + die haben die Einstellungen noch nie geändert.

Und so sieht das aus: Einmal mit den unveränderten Eigenschaften und einmal mit geänderten DPI Einstellungen - Skalierung 150%

TigerLilly 19. Mär 2024 07:25

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1534808)
Hast du mal versucht, die Anwendung umzubenennen?

Ja, auch - aber das ist bei allen EXEs so, die von mir mit D2006 erzeugt werden, darum habe ich das auch nie hinterfragt, sondern als Standardverhalten abgetan.

dummzeuch 19. Mär 2024 07:52

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Es liegt aber definitiv nicht daran, dass Delphi 2006 generell ein solches Problem hat. Ich habe gerade testweise ein neues Projekt damit erstellt und es wird skaliert wie erwartet.

TigerLilly 19. Mär 2024 07:54

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Vielleicht weil das ein XP-Rechner ist?

Uwe Raabe 19. Mär 2024 08:48

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Bei XP gibt es aber weder die Möglichkeit zu skalieren, noch eine Kompatibilitätseinstellung für Hohe DPI. Lediglich die Schriftgröße lässt sich einstellen.

Wenn es bei dir mit einem einfachen D2006 Programm reproduzierbar ist, dann häng doch so ein Programm einfach mal hier an.

TigerLilly 19. Mär 2024 09:35

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Ich hatte nicht recht. Ein neu kompiliertes Programm, das nur aus einem Form (und damit keinen Bibliothekscode verwendet) besteht, verhält sich so, wie Ihr behauptet habt. Da habt Ihr mir schon mal geholfen. :- )

Irgendwo in den Tiefen unseres Codes versteckt sich also ein "Hi! Ich bin DPI aware". Das muss irgendeine 3rd Party Lib sein. Wie könnte ich das finden?

TigerLilly 19. Mär 2024 10:13

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Die DevEx Library macht das.

Code:
  if Win32MajorVersion >= 6 then
  begin
    FUser32DLL := GetModuleHandle(user32);
    SetProcessDPIAware := GetProcAddress(FUser32DLL, 'SetProcessDPIAware');
    if Assigned(SetProcessDPIAware) then
      SetProcessDPIAware;
  end;
Das gehört zu einer Initialisierungsroutine, die im Initialization-Teil aufgerufen wird.

Verstehe ich nicht - warum tun die das? Die wissen doch nichts über den Rest der Software und die anderen Komponenten.

Uwe Raabe 19. Mär 2024 10:45

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Zitat:

Zitat von TigerLilly (Beitrag 1534819)
Verstehe ich nicht - warum tun die das? Die wissen doch nichts über den Rest der Software und die anderen Komponenten.

Das ist mir allerdings auch ein Rätsel. Insbesondere bei einer Delphi-Version die per se gar kein High-DPI kann.

Schön dass du es doch noch gefunden hast.

Es ist auch interessant zu sehen, wie sich die eigentliche Frage "Wie kann ich beim Installieren die DPI Eigenschaften setzen?" entwickelt hat zu "Verstehe ich nicht - warum tun die das?"

ULIK 19. Mär 2024 10:50

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Das wird aber unter XP gar nicht ausgeführt! Und wenn dann würde es System-DPI aware setzen (https://learn.microsoft.com/de-de/wi...rocessdpiaware)

TigerLilly 19. Mär 2024 10:51

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Zitat:

Zitat von ULIK (Beitrag 1534822)
Das wird aber unter XP gar nicht ausgeführt! Und wenn dann würde es System-DPI aware setzen (https://learn.microsoft.com/de-de/wi...rocessdpiaware)

Aber unter Windows 10 und 11 wird es ausgeführt.

ULIK 19. Mär 2024 11:01

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Zitat:

Zitat von TigerLilly (Beitrag 1534815)
Vielleicht weil das ein XP-Rechner ist?

Deswegen dachte ich, das Programm läuft unter XP.

Welche DX Version verwendest Du denn? Die aktuelle hat das so jedenfalls nicht mehr drinnen.

himitsu 19. Mär 2024 11:09

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Zitat:

Zitat von TigerLilly (Beitrag 1534819)
Verstehe ich nicht

Die interessiert eh nie irgendwas anderes.

Sieht man schon an deren Hooks und wie sie mit anderen globalen Variablen umgehen.

TigerLilly 20. Mär 2024 09:32

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Womit ich aber wieder zur Ausgangsfrage zurückkehre. Den Code von DevEx möchte ich nicht ändern, daher bleibt meine Frage aufrecht. Würde ein Manifest, das ich mit ausliefere, das lösen? Und welchen Inhalt müsste das Manifest haben?

BerndS 20. Mär 2024 09:58

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Du könntest auch versuchen SetProcessDPIAware(0 {PROCESS_DPI_UNAWARE}) aus der Unit Winapi.ShellScaling aufzurufen.
Das sollte dann auch möglichts im initialization gemacht werden.

Die Unit Winapi.ShellScaling wird es mit D6 nicht geben, aber die könntest du dafür aus deinem aktuellen Delphi kopieren.

Ich selber nutze SetProcessDPIAware auch, da der Kunden dann testen kann, was im ab besten gefällt.
Aber ob man das mehrfach mit anderen Werten setzen kann habe ich nicht probiert.:gruebel:

Uwe Raabe 20. Mär 2024 10:04

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Zitat:

Zitat von TigerLilly (Beitrag 1534869)
Den Code von DevEx möchte ich nicht ändern

Das würde ich aber dringend empfehlen. Der Code ist grob fahrlässig, eigentlich schon bösartig und gehört schlichtweg eliminiert. Eventuell kannst du dich ja durchringen, ihn in ein IFDEF zu packen, dass ihn bei D2006 ausblendet. D2006 kann nun mal nicht DPI aware.

ULIK 20. Mär 2024 10:33

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Kannst Du auf die Version 1.58 vom DexExpress wechseln? Ab da ist das wohl ausgebaut.

freimatz 21. Mär 2024 07:40

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Und auch die Version ist schon über 10 Jahre alt - oder irre ich mich da?

Sinspin 21. Mär 2024 08:50

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Die neueren Versionen von DevExpress unterstützen vermutlich kein D2009 mehr.

Ich würde den Code auch ausbauen. Oder zumindest auskommnetieren.

TigerLilly 21. Mär 2024 11:31

AW: Wie kann ich beim Installieren die DPI Eigenschaften setzen?
 
Ja, mal sehen. Ist wahrscheinlich am besten so. Danke jedenfalls für die Hilfestellungen. :thumb:


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