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/)
-   -   Delphi High DPI für eigene Controls? (https://www.delphipraxis.net/198414-high-dpi-fuer-eigene-controls.html)

uups 31. Okt 2018 09:55

High DPI für eigene Controls?
 
Hallo!

Ich habe meine Anwendung auf HighDPI umgestellt und es sieht nun auch auf den höchsauflösenden Bildschirmen gut aus. Bis auf die wenigen GUI-Komponenten, die ich selbst erstellt habe. Z.B. habe ich mir von einiger Zeit eine Komponente erstellt, die aus einem TPanel besteht, auf dem mehrere TComboBox und TImage platz genommen haben. Die Komponente wird als Package in Delphi installiert. Die GUI der Komponente wird komplett zur Laufzeit erstellt. Nach der Umstellung auf HighDPI habe ich nun das Problem, dass die GUI-Elemente der Komponente absolut falsch dargestellt werden, obwohl ich in der Quellcode überall MulDiv() gesetzt habe. Sogar die Schrift in den ComboBoxen ist mehrfach vergrössert.

Bin gerade am verzweifeln, komme nicht weiter. Was mache falsch?

CCRDude 31. Okt 2018 10:44

AW: High DPI für eigene Controls?
 
Zitat:

Zitat von uups (Beitrag 1417153)
Bin gerade am verzweifeln, komme nicht weiter. Was mache falsch?

Ich würde vermuten: die Umrechnung?

"MulDiv()" sagt jetzt nicht wirklich was aus. Klar kannst/musst Du Positionen/Größen umrechnen, aber nur weil man eine Rechenoperation anwendet, heißt das ja noch nicht, dass man die richtigen Zahlen einsetzt. Bring doch mal ein paar Code-Beispiele, wie Du das genau handhabst.

uups 31. Okt 2018 11:02

AW: High DPI für eigene Controls?
 
z.B. so erstelle ich ein Button für die GUI der Komponente:

Delphi-Quellcode:
FButtonFirst := TButton.Create(FPanelButtonsFirstPrew);
with FButtonFirst do
begin
  Parent := FPanelButtonsFirstPrew;
  Width := MulDiv(16, Screen.PixelsPerInch, 96);
  Height := MulDiv(16, Screen.PixelsPerInch, 96);
  Top := MulDiv(4, Screen.PixelsPerInch, 96);
  Left := MulDiv(8, Screen.PixelsPerInch, 96);
  OnClick := ButtonFirstClick;
end;

DieDolly 31. Okt 2018 11:40

AW: High DPI für eigene Controls?
 
Ich mache das alles manuell und verlasse mich da keines Falls auf irgendwelche mathematischen Funktionen wie MulDiv.
Ich lese einmalig die DPI aus und entscheide dann was wie groß wohin muss. Funktioniert bestens.

Uwe Raabe 31. Okt 2018 11:42

AW: High DPI für eigene Controls?
 
Du solltest bedenken, daß beim Setzen von
Delphi-Quellcode:
Parent
bereits dessen DPI-Wert übernommen wird. Probier doch mal, den
Delphi-Quellcode:
Parent
als letztes zuzuweisen (ein konkretes, kleines Testprogramm wäre hier schön):
Delphi-Quellcode:
FButtonFirst := TButton.Create(FPanelButtonsFirstPrew);
with FButtonFirst do
begin
  Width := 16;
  Height := 16;
  Top := 4;
  Left := 8;
  OnClick := ButtonFirstClick;
  Parent := FPanelButtonsFirstPrew;
end;

uups 31. Okt 2018 16:20

AW: High DPI für eigene Controls?
 
@Uwe Raabe
Vielen Dank! Oh Mann, das ist doch so offensichtlich mit dem Parent :oops:
Nicht ganz offensichtlich ist es dagegen mit dem Font der ComboBox. Der ist nach wie vor extrem groß, wenn High DPI aktiv ist.

Uwe Raabe 31. Okt 2018 18:58

AW: High DPI für eigene Controls?
 
Zitat:

Zitat von uups (Beitrag 1417187)
Nicht ganz offensichtlich ist es dagegen mit dem Font der ComboBox. Der ist nach wie vor extrem groß, wenn High DPI aktiv ist.

Immer noch:
Zitat:

Zitat von Uwe Raabe (Beitrag 1417170)
(ein konkretes, kleines Testprogramm wäre hier schön)



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf