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 DBGRID skaliert falsch mit Designtime-Columns (https://www.delphipraxis.net/195296-dbgrid-skaliert-falsch-mit-designtime-columns.html)

Dabei-seit-Turbo-Pascal-2 17. Feb 2018 22:20

DBGRID skaliert falsch mit Designtime-Columns
 
Meine Delphi-10.2.2-Anwendung enthält zahlreiche DBGRIDs. Bei 200% Skalierung unter Windows 10 werden einige Grids richtig skaliert, andere haben eine viel zu große Schrift. HighDPI ist aktiviert und Scaled ist true.

Ich habe jetzt herausgefunden, dass die DBGRIDs korrekt dargestellt werden, welche _keine_ zur Entwurfszeit zugewiesenen Spaltendefinitionen haben. Sobald zur Designtime Dbgrid.Columns definiert sind, wird die Schrift doppelt so breit und doppelt so hoch dargestellt. Das eigentliche Raster des DBGRID hat in beiden Fällen die richtige Größe. Die zu große Schrift wird vertikal abgeschnitten und führt horizontal zu doppelt so breiten Spalten. Die Gesamtbreite des DBGRID ist aber korrekt.

Meine aktuelle Lösung ist, zur Laufzeit im Form.OnCreate() die DBGrid.Font.Size, DBGrid.Titlefont.Size und von jeder Spalte die Column.Font.Size im Verhältnis 96 dpi zu aktueller Monitor-DPI zu setzen. Eine für alle DBGRIDs funktionierende Routine muss dafür erkennen können, ob eine Spaltendefinition manuell zur Designzeit oder automatisch zur Laufzeit erzeugt wurde. Habt Ihr eine Idee, wie ich das rauskriegen kann?

Uwe Raabe 17. Feb 2018 23:02

AW: DBGRID skaliert falsch mit Designtime-Columns
 
Könnte das dieser Bug sein: DBGrid inside of Pagecontrol does not scale correctly using ScaleBy

Zitat:

If you have a DBGrid inside of a TTabsheet and call the ScaleBy method of the form, the DBGrid does not display correctly. It looks like it is increasing the font 2X and increasing the height of the DBGrid Cell 1x.

Dabei-seit-Turbo-Pascal-2 18. Feb 2018 09:50

AW: DBGRID skaliert falsch mit Designtime-Columns
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es könnte etwas damit zu tun haben, ist aber nicht exakt das, was ich beobachte. Auf dem angefügten Screenprint habe ich zwei DBGRIDs, die direkt auf einem TTABSHEET liegen und es komplett ausfüllen (align:=alCient). Das obere skaliert falsch. Bei ihn sind die Spalten zur Designzeit in der IDE deklariert worden (erkennbar für mich an der gemischten Groß-Kleinschreibung der Spaltenüberschriften). Das untere DBGRID skaliert richtig. Bei ihn werden die Spalten erst zur Laufzeit von Delphi erzeugt (für mich erkennbar an den Spaltenüberschriften, die mit den Feldnamen der Tabelle übereinstimmen).

Dieses Problem habe ich auch bei DBGRIDS, die gar nicht, bzw. nicht direkt auf TTABSHEETs liegen.

Dabei-seit-Turbo-Pascal-2 18. Feb 2018 10:03

AW: DBGRID skaliert falsch mit Designtime-Columns
 
Eine grundsätzliche Lösung des Problems, dass DBGRIDs falsch skalieren, wäre natürlich schön. Für den Moment würde es mir aber völlig ausreichen, wenn ich zur Laufzeit feststellen könnte, ob die Spalten (dbgrid.columns) eines DBGRID zur Laufzeit oder zur Designzeit erzeugt wurden.

Wenn sich das feststellen läßt, genügt ein einziger zentral im ONCREATE() meiner Fensterhierachie ganz oben eingebauter Prozeduraufruf, um alle DBGRIDs in allen meinen Programmen abzudecken. Wenn nicht, muss ich diese Prozedur für jedes DBGRID mit manueller Spaltendefinition einzeln aufrufen.

Natürlich könnte man die Spalten der TABLE oder der QUERY mit denen des DBGRID vergleichen und bei Gleichheit davon ausgehen, dass keine manuelle Designtime-Spaltendefinition vorliegt, aber das ist nicht garantiert und außerdem ein gewisser Rechenaufwand. Ich suche nach einer eleganteren Lösung.

Uwe Raabe 18. Feb 2018 10:29

AW: DBGRID skaliert falsch mit Designtime-Columns
 
Du könntest
Delphi-Quellcode:
TForm.Loaded
überschreiben und prüfen, ob
Delphi-Quellcode:
MyDBGrid.Columns.Count > 0
ist. Kann sogar sein, daß deine Korrekturroutine dort auch schon greift.

Dabei-seit-Turbo-Pascal-2 18. Feb 2018 13:13

AW: DBGRID skaliert falsch mit Designtime-Columns
 
Danke für den Tipp!

Leider trifft meine Beobachtung nicht immer zu. Ich habe auch DBGRIDs, bei denen Designtime-Columns vorhanden sind und die richtig skalieren. Die werden dann von meiner Routine auf eine zu kleine Schriftart "nachskaliert".

Was zu funktionieren scheint, ist ein Vergleich von DBGRID.Font.Size und DBGRID.Column[0].Font.Size. Wenn diese nicht gleich sind, ist das DBGRID falsch skaliert und meine Korrekturroutine setzt für alle Columns die Font.Size und die Title.Font.Size neu.

Der Vollständigkeit halber sollte ich noch erwähnen, dass ich mit Formularvererbung arbeite und auch den DBGRID.OnDrawColumnCell-Event nutze, um Zellen und Zeilen farblich zu gestalten, allerdings nicht mit verschiedenen Schriftgrößen in den DBGrids arbeite.

bcvs 30. Apr 2020 11:01

AW: DBGRID skaliert falsch mit Designtime-Columns
 
Danke für den Hinweis, auch wenn der schon etwas älter ist.

Ich hatte ein ähnliches Problem: In D 10.2 skaliert das DBGrid falsch auf Systemen mit mehreren Monitoren und unterschiedlichen DPI-Einstellungen per Monitor.

Also setzte ich jetzt im OnAfterMonitorDpiChanged des Form die Font.Size der Columns auf die Font.Size des DBGrid.


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