Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   TColorDlg und HiDPI - Gibt es eine Lösung? (https://www.delphipraxis.net/211810-tcolordlg-und-hidpi-gibt-es-eine-loesung.html)

Harry Stahl 4. Nov 2022 22:33

TColorDlg und HiDPI - Gibt es eine Lösung?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Auf Multimonitor-Systemen wo HIghDPI und normal DPI Monitore vorhanden sind, wird der TColorDialog falsch dargestellt, wenn er direkt auf dem Monitor ohne scaling erzeugt wird, bzw. dort hin bewegt wird.

Das sieht hier dann so aus, wie in der Anlage.

Es gibt auch schon seit einiger Zeit eine QC-Meldung: https://quality.embarcadero.com/brow...ColorDialog%22

Kennt jemand einen Work-Around hierfür?

Harry Stahl 4. Nov 2022 22:41

AW: TColorDlg und HiDPI - Gibt es eine Lösung?
 
OK, erledigt, habe hier einen Tipp gefunden, den man für alle CommonDialoge anwenden kann:

https://quality.embarcadero.com/brow...ColorDialog%22

Habe also das vor dem Tform als Type deklariert:

Delphi-Quellcode:
TColorDialog = class(Vcl.Dialogs.TColorDialog)
  protected
    function TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool; override;
  end;
und in der Implementation das:

Delphi-Quellcode:
function TColorDialog.TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool;
var
  previousDpiContext: DPI_AWARENESS_CONTEXT;
begin
  previousDpiContext := SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_SYSTEM_AWARE);
  try
    Result := inherited TaskModalDialog(DialogFunc, DialogData);
  finally
    SetThreadDpiAwarenessContext(previousDpiContext);
  end;
end;
Zwar ist der Dialog auf dem Low_Moitor dann nicht highdpi, aber wenigstens sieht er anständig aus...

himitsu 5. Nov 2022 00:10

AW: TColorDlg und HiDPI - Gibt es eine Lösung?
 
Hat das nur Einfluss auf den gleich zu erstellenden Dialog, oder auch auf alle anderen bereits existierenden Fenster in diesem Thread?

Wir arbeiten auch vermehrt mit TaskDialogen, aber HighDPI ist aktuell eher noch für die ferne Zukunft vorgeplant.


Wir hatten z.B. mal das Problem, dass der Dialog eines Scannertreibers (Fujitsu Paperstream) alle Fenster vom Program in der Auflösung/DPI permanent veränderte (bis zum Programmende).

Harry Stahl 5. Nov 2022 10:16

AW: TColorDlg und HiDPI - Gibt es eine Lösung?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von himitsu (Beitrag 1514346)
Hat das nur Einfluss auf den gleich zu erstellenden Dialog, oder auch auf alle anderen bereits existierenden Fenster in diesem Thread?

Wir arbeiten auch vermehrt mit TaskDialogen, aber HighDPI ist aktuell eher noch für die ferne Zukunft vorgeplant.

1) Nein, kann da bislang keine negativen Auswirkungen auf andere Dialoge feststellen

2) Dann habt Ihr die Anwendungen aber mit GDI-Skalierung erstellt oder? Denn andererseits sieht es unter Umständen recht gruselig bei den Kunden aus, wenn man auf HighDPI nicht testet...

3) Anmerkung: Das gleiche muss man übrigens auch mit dem FontDialog machen, sonst sieht es u.U. so wie in der Anlage aus...

himitsu 5. Nov 2022 11:53

AW: TColorDlg und HiDPI - Gibt es eine Lösung?
 
Aktuell noch nichts eingestellt.
Programm aus Zeiten von DOS Delphi 7 Delphi XE bald Delphi 10.x/11 halbwegs fertig:
Die DPROJs mit 10.4 neu erstellt, aber noch nichts in Richtung MonitorV2 umgestellt.

Ich hatte unser Programm (XE) nur einmal probehalber unter 4K laufen lassen, mit 100% und auch mal 200%, aber nicht in Dialoge geschaut. :oops:
Wenn du direkt vor einem 75" stehst, siehst'e dann schon die Pixel.

Irgendwann wäre es aber bestimmt gut, das auf HighDPI umzustellen, drum schonmal die Frage. :)

Harry Stahl 5. Nov 2022 14:03

AW: TColorDlg und HiDPI - Gibt es eine Lösung?
 
Wenn Du nur eine Konstellation mit nur einem Monitor hast und der ist HighDPI, dann ist das i.d.R. nicht so ein großes Problem. Echt hakelig wird es, wenn Du mehrere Monitore hast, mit unterschiedlichen Auflösungen und nur ein Monitor HigDPI hat...

Auch wenn das letztlich ein ziemlicher Aufwand ist: GDI-Skalierte Programme auf HighDPI Monitore sehen doch ziemlich verwaschen aus, das ist nicht schön. Ein Bildbearbeitungsprogramm mit verwaschenen Grafiken, na, das geht wohl nicht...

Übrigens: Ich habe insofern Glück, als dass ich die meisten meiner Programme inzwischen unter FMX laufen habe, da funktioniert das fast alles von alleine. Jedenfalls im Verhältnis zur VCL ist das kaum ein nennenswerter Aufwand...


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