Autor Beitrag
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mi 01.12.04 18:32 
Hallo.

Ich versuche gerade die Spalten meines DB-Grids dynamisch, abhängig von der Grösse der Datenbankfelder, in der
Grösse zu ändern.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  for i := 0 to Grid.Columns.Count - 1 do
  begin
      Grid.Columns[i].Width :=
        source.DataSet.FieldDefs[i].Size;
  end;


Nur wenn ein Integer-Feld die max-Grösse von 2 hat, ist die Spalte nur 2 Pixel gross. Definitiv zu klein für 2-stellige Ziffern.

Hat jemand eine Idee?

Danke euch

ki
Grendel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 443

Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
BeitragVerfasst: Mi 01.12.04 18:38 
Erzeug Dir im OnResize() des Grids ein temporäres ControlCanvas, setz die Font des Canvas auf die des Grids ("Assign") und hol Dir über Canvas.TextWidth() die Breite eines Eintrags. Natürlich musst Du noch alle Einträge einer Spalte durchlaufen und dir den breitesten merken. Feddich.

Bis neulich ...
kiwicht Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mi 01.12.04 19:42 
Hm... vielen Dank! Aber ich glaub das zerrt ganz schön an der Performance, oder? Wenn quasi jeder Datensatz der Datenbank erstmal durchgegangen wird?
Grendel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 443

Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
BeitragVerfasst: Mi 01.12.04 20:04 
kiwicht hat folgendes geschrieben:
Hm... vielen Dank! Aber ich glaub das zerrt ganz schön an der Performance, oder? Wenn quasi jeder Datensatz der Datenbank erstmal durchgegangen wird?

Klar kostet das Rechenzeit aber anders geht es nicht.
Wenn das Grid die Informationen bereitstellen würde/könnte müsste es intern ebenso arbeiten, denn Du musst alle Daten einer Spalte durchgehen und deren Größe, die von der eingestellten Schriftart abhängig ist, berechnen um den Breitesten bestimmen zu können.
Wenn man mit einem Schriftsatz, mit fester Zeichenbreite arbeiten würde könnte man erst die Zeichen zählen und nur das längste Wort durch das Canvas schicken. Aber sobald die Zeichenbreite variabel ist würde das Ergebnis schon nicht mehr stimmen.

Bis neulich ...