AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) TColorDlg und HiDPI - Gibt es eine Lösung?
Thema durchsuchen
Ansicht
Themen-Optionen

TColorDlg und HiDPI - Gibt es eine Lösung?

Ein Thema von Harry Stahl · begonnen am 4. Nov 2022 · letzter Beitrag vom 5. Nov 2022
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.530 Beiträge
 
Delphi 11 Alexandria
 
#1

TColorDlg und HiDPI - Gibt es eine Lösung?

  Alt 4. Nov 2022, 23:33
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?
Miniaturansicht angehängter Grafiken
tcolordlg.png  
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.530 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TColorDlg und HiDPI - Gibt es eine Lösung?

  Alt 4. Nov 2022, 23:41
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...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#3

AW: TColorDlg und HiDPI - Gibt es eine Lösung?

  Alt 5. Nov 2022, 01:10
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).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 5. Nov 2022 um 01:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.530 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TColorDlg und HiDPI - Gibt es eine Lösung?

  Alt 5. Nov 2022, 11:16
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...
Miniaturansicht angehängter Grafiken
fontdialog.png  

Geändert von Harry Stahl ( 5. Nov 2022 um 12:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#5

AW: TColorDlg und HiDPI - Gibt es eine Lösung?

  Alt 5. Nov 2022, 12:53
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.
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.530 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TColorDlg und HiDPI - Gibt es eine Lösung?

  Alt 5. Nov 2022, 15:03
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...
  Mit Zitat antworten Zitat
Antwort Antwort


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:27 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