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/)
-   -   Komponente ignoriert Größeneinstellung (https://www.delphipraxis.net/214973-komponente-ignoriert-groesseneinstellung.html)

BRobby 15. Apr 2024 13:43

Komponente ignoriert Größeneinstellung
 
Hallo zusammen,

Unter Delphi 11.3, CE, versuche ich, eine visuelle Komponentwe zu entwickeln.
Beim Einfügen der Komponente in ein Formular im Designer hat die Komponente eine andere Größe als vorher festgelegt.
Das ist unabhängig von der Skalierung des Bildschirms. Ich arbeite normal mit 175% an einem 4k-Monitor.
Im beigefügten Beispiel (alles Unerhebliche habe ich weggelassen) sollte die Komponente 200 x 100 Pixel groß sein, es sind aber real 302 x 151 Pixel.
Ich habe divers experimentiert, konnte keine Änderung erzielen.
In der erweiterten Ursprungsversion war es so, dass manchmal beim ersten Einfügen die Größe stimmte, danach aber nicht mehr.

Ist das ein Bug oder weiß jemand, wie dieses Verhalten abzustellen ist?

Hier der Code dazu:

Delphi-Quellcode:
unit KomponentenTest;

interface

uses
  Windows, System.Classes, Vcl.Controls;

type
  tKomponente = class(tWinControl)
  public
     constructor Create(aOwner: TComponent); override;
     destructor Destroy;
  end;

procedure Register;

implementation

destructor tKomponente.Destroy;
begin
  inherited;
end;

constructor tKomponente.Create(aOwner: TComponent);
begin
  inherited Create(aOwner);
  Align:= alNone;
  AutoSize:=false;
  AlignWithMargins:=False;
  Width := 200;
  Height:= 100;
end;

procedure Register;
begin
  RegisterComponents('RW', [tKomponente]);
end;

end.

Uwe Raabe 16. Apr 2024 13:55

AW: Komponente ignoriert Größeneinstellung
 
Bei 175% Skalierung und einer IDE mit High-DPI Support wäre eine Größe von 350x175 zu erwarten. Ein entsprechender Test hier bei 100% Skalierung liefert dann auch 200x100 und bei 150% entsprechend 300x150, insofern ist der Code offenbar korrekt. Wenn es bei 175% (die dann aber auch in der IDE unterstützt werden müssen) auf 302x151 hinausläuft, muss das Problem an einer anderen Stelle liegen.

Wie sind denn die Einstellungen unter Tools - Optionen - Benutzeroberfläche - Formular-Designer - High DPI?

BRobby 16. Apr 2024 14:21

AW: Komponente ignoriert Größeneinstellung
 
Vielen Dank!!

Ich habe es nochmals getestet. Sie haben recht. Bei 175% Skalierung ist das Feld tatsächlich 350x175 Px groß.
Bei 100% stimmt es auch mit 200x100.
Bei meinen Tests gestern war das aber anders, warum weiß ich nicht.

In den Einstellungen steht VCL-Designer - High-DPI-Modus auf "Automatisch ..", Benutzerdefiniertes PPI-Design auf 145 (ausgegraut), Rastergöße skalieren ist nicht angekreuzt.

Damit scheint alles richtig zu sein.

Leider komme ich mit den Eigenschaften der Skalierung noch nicht ausreichend zurecht.
Wo kann man das möglichst präzise und nachvollziehbar mit Beispielen nachlesen?

Nochmals Danke für die rasche Anwort!!

Uwe Raabe 16. Apr 2024 14:23

AW: Komponente ignoriert Größeneinstellung
 
Zitat:

Zitat von BRobby (Beitrag 1535811)
Leider komme ich mit den Eigenschaften der Skalierung noch nicht ausreichend zurecht.

Das ist jetzt etwas vage. Was genau ist denn unklar?

BTW, bei Destroy fehlt ein
Delphi-Quellcode:
override
;

BRobby 16. Apr 2024 14:48

AW: Komponente ignoriert Größeneinstellung
 
Unklar: Kann ich auch nicht präzisieren.

Es ist für mich verwirrend, wenn ich z.B. im Text für Code 200x100 Px eingebe und dann im Formular 350x175 angezeigt bekomme.

Sherlock 16. Apr 2024 15:02

AW: Komponente ignoriert Größeneinstellung
 
Zitat:

Zitat von BRobby (Beitrag 1535815)
Es ist für mich verwirrend, wenn ich z.B. im Text für Code 200x100 Px eingebe und dann im Formular 350x175 angezeigt bekomme.

Das ist eben das was die Unterstützung der Skalierung ausmacht. Die absoluten Pixelangaben werden...skaliert. Wenn Du das nicht haben willst, dann mußt Du die Skalierung abschalten. Dann würde halt Deine Anwendung auf Deinem 4K Monitor so klein aussehen, wie sie wirklich ist. Für meinen persönlichen geschmack, absolut richtig, denn ich will keine Pixel verschwenden. Aber die allermeisten Anwender betreiben Ihre Pixelmonster mit aktiver Skalierung. Darum lieber für diesen Fall vorsorgen, bzw. mit dem Ergebnis leben oder daran feilen, falls es unbefriedigend ist.


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