AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DBGRID skaliert falsch mit Designtime-Columns

Ein Thema von Dabei-seit-Turbo-Pascal-2 · begonnen am 17. Feb 2018 · letzter Beitrag vom 30. Apr 2020
Antwort Antwort
Dabei-seit-Turbo-Pascal-2

Registriert seit: 19. Feb 2010
26 Beiträge
 
Delphi 11 Alexandria
 
#1

DBGRID skaliert falsch mit Designtime-Columns

  Alt 17. Feb 2018, 22:20
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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#2

AW: DBGRID skaliert falsch mit Designtime-Columns

  Alt 17. Feb 2018, 23:02
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Dabei-seit-Turbo-Pascal-2

Registriert seit: 19. Feb 2010
26 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: DBGRID skaliert falsch mit Designtime-Columns

  Alt 18. Feb 2018, 09:50
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.
Miniaturansicht angehängter Grafiken
2018-02-18_10h40_35.jpg  
  Mit Zitat antworten Zitat
Dabei-seit-Turbo-Pascal-2

Registriert seit: 19. Feb 2010
26 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: DBGRID skaliert falsch mit Designtime-Columns

  Alt 18. Feb 2018, 10:03
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#5

AW: DBGRID skaliert falsch mit Designtime-Columns

  Alt 18. Feb 2018, 10:29
Du könntest TForm.Loaded überschreiben und prüfen, ob MyDBGrid.Columns.Count > 0 ist. Kann sogar sein, daß deine Korrekturroutine dort auch schon greift.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Dabei-seit-Turbo-Pascal-2

Registriert seit: 19. Feb 2010
26 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: DBGRID skaliert falsch mit Designtime-Columns

  Alt 18. Feb 2018, 13:13
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.
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#7

AW: DBGRID skaliert falsch mit Designtime-Columns

  Alt 30. Apr 2020, 11:01
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.
  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 01:06 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