![]() |
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? |
AW: DBGRID skaliert falsch mit Designtime-Columns
Könnte das dieser Bug sein:
![]() Zitat:
|
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. |
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. |
AW: DBGRID skaliert falsch mit Designtime-Columns
Du könntest
Delphi-Quellcode:
überschreiben und prüfen, ob
TForm.Loaded
Delphi-Quellcode:
ist. Kann sogar sein, daß deine Korrekturroutine dort auch schon greift.
MyDBGrid.Columns.Count > 0
|
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. |
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 07:12 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