AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi DBGrid1.Columns[0].Width:= .... / geht das auch automatisch?

DBGrid1.Columns[0].Width:= .... / geht das auch automatisch?

Ein Thema von NicoleWagner · begonnen am 25. Nov 2021 · letzter Beitrag vom 29. Nov 2021
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: DBGrid1.Columns[0].Width:= .... / geht das auch automatisch?

  Alt 27. Nov 2021, 09:29
Ist das nicht alles sehr kompliziert? Dafür gibt es doch TColumn.DefaultWidth ? Das verwendet das DisplayWidth Property des Fields. Durch geeignete Werte dort (z.B. bei calculated fields) kann man die Spaltenbreite recht einfach steuern.

Wenn es denn tatsächlich von Hand gehen soll, bietet sich auch TCustomGrid.TextWidthToColWidth an. Das berücksichtigt wenigstens auch noch die Ränder links und rechts.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
NicoleWagner

Registriert seit: 6. Jul 2010
167 Beiträge
 
Delphi XE3 Professional
 
#2

AW: DBGrid1.Columns[0].Width:= .... / geht das auch automatisch?

  Alt 27. Nov 2021, 10:19
Danke für Deine Antwort.
Ich fürchte, es geht nicht in meinem Fall.

Das liegt daran, dass das DBGrid und die ADQuery irgendwie nicht stimmig miteinander arbeiten, was veränderte Reihenfolgen der DBGrid-Felder einerseits und calculated fields in der ADQuery betrifft. Delphi ist zu doof, die Felder abzuzählen und denkt zudem, sie wären leer (calculated), wenn ich sie im Draw Event fülle. Ja, es ist schlechter Stil, im Draw Event statt im Calc-Event die Werte der Felder zu verändern. Allerdings will ich die Datumswechsel nicht zweimal rechnen, weil ich sie ja in der Grafik ohnehin brauche, um Wochen- und Monatswechsel einzuzeichnen.

Daraus folgt, dass die Breite einiger Felder Null ist, weil das Feld für Delphi leer ist.
Auch wenn ich in Draw etwas umformatiere etwa von 1,2345548886 auf 1,23
so bekommt Delphi das nicht mit und setzt eine sehr große Breite, statt eine schmale.
Das entschuldigt meine unübliche Vorgangsweise keineswegs. Denn das Draw-Ereignis sollte ja für Formatierungen gut sein, statt dass Delphi davon überfordert ist.

Ich probierte auch, im Draw-Ereignis auf die 2. RecNo zuzugreifen und die Spalten-Breite dort zu setzen. Der wer will die Breite der Überschrift? Ich möchte die Breite des Inhalts.
Warum das meine Anwendung in Zeitlupenmodus versetzte, weiß ich nicht.
Und irgendwann will ich es nicht mehr wissen, weil frustriert von dem Müll, den meine IDE darstellt. Denn all die Fehlzugriffe auf nicht-korrekt zugreifbare Elemente bringen die IDE derart zum Absturz, dass ich sie mehrmals pro Stunde mit dem Taskmanager abschießen muss.

Sondern ich werde die Breiten weiterhin manuell setzen.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: DBGrid1.Columns[0].Width:= .... / geht das auch automatisch?

  Alt 27. Nov 2021, 10:44
Sondern ich werde die Breiten weiterhin manuell setzen.
Das hatte ich auch gar nicht in Frage gestellt. Ich würde dann aber die Spaltenbreite auf DefaultWidth setzen, da diese das TField.DisplayWidth zur Berechnung heranzieht.
Delphi-Quellcode:
  for I := 0 to DBGrid1.Columns.Count - 1 do
    DBGrid1.Columns[I].Width := DBGrid1.Columns[I].DefaultWidth;
Ich halte nicht viel davon, die tatsächlichen Feldwerte der gesamten Tabelle auf ihre aktuelle Länge zu prüfen und davon das Maximum zu nehmen. Das könnte zu unterschiedlichem Aussehen je nach Datenlage führen.

Wenn der Feldinhalt dynamisch ist, dann bestimme einfach einen sinnvollen Wert für DisplayWidth des entsprechenden Feldes. Im Gegensatz zu der Spaltenbreite wird DisplayWidth als Anzahl Zeichen angegeben. Das macht die Sache deutlich einfacher.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
NicoleWagner

Registriert seit: 6. Jul 2010
167 Beiträge
 
Delphi XE3 Professional
 
#4

AW: DBGrid1.Columns[0].Width:= .... / geht das auch automatisch?

  Alt 27. Nov 2021, 13:57
Welche Beitrag jetzt oben und unten steht, ist für mich recht verwirrend.
Wenn ich doppelt antworte, bitte um Entschuldigung:
"Display.Width" funktioniert leider deshalb nicht, weil das lahme Ding diverse Spalten als "leer" ansieht.
Details dazu und welche siehe andere Postings.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: DBGrid1.Columns[0].Width:= .... / geht das auch automatisch?

  Alt 29. Nov 2021, 14:35
Ist #10 deswegen auch nicht zu gebrauchen?
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:54 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