![]() |
StringGrid: ColWidth nach längsten Eintrag ausrichten
Hi,
bin Newbie und arbeite mich gerade in Delphi ein. Ich habe mittlerweile ein StringGrid gefüllt und will nun, dass die Spaltenbreite sich dem längsten Eintrag anpasst. Habe bisher nichts gefunden, falls das Thema schon durchgekaut wurde wäre ich für einen Link dankbar :wink: THX! |
Re: StringGrid: ColWidth nach längsten Eintrag ausrichten
Zitat:
Eine vorgefertige Funktion gibt es dafür nicht. Du musst also selbst alle Zellen der Spalte(n) durchlaufen und ColWidths[] entsprechend setzen. Ungetestet:
Delphi-Quellcode:
for Col := 0 to Grid.ColCount - 1 do
begin len := 20; // min. Breite for Row := 0 to Grid.RowCount - 1 do begin if len < Grid.Canvas.TextWidth(Grid.Cells[Row, Col]) then len := Grid.Canvas.TextWidth(Grid.Cells[Row, Col]); end; Grid.ColWidths[Col] := len; end; |
Besten Dank, habe den Code überarbeitet und es läuft :D
Delphi-Quellcode:
for Col := 0 to Grid.ColCount - 1 do
begin len2 := 0; len := 20; // min. Breite for Row := 0 to Grid.RowCount - 1 do begin if len < Grid.Canvas.TextWidth(Grid.Cells[Col, Row]) then len := Grid.Canvas.TextWidth(Grid.Cells[Col, Row]); if len2 < len then len2 := len; end; Grid.ColWidths[Col] := len2; end; |
Eventuell ist es jetzt auch noch sinnvol beim hinzufügen eines Eintrages zu überpüfen ob dieser breiter ist als die aktuelle Breite der Spalte und wenn ja die Spaltenbreit gleich zu setzen.
Dann muss nicht jedesmal das gesamte Grid durchlaufen werden. |
Stimmt, kann man noch einbauen. In meinem Fall wird das Grid nur einmal aus der Datenbank gefüllt, dafür reicht es :wink:
*grübel* mal schauen... :coder: |
Hallo Leute,
ich habe das Ganze mal noch auf ein DBGrid umgesetzt (und damit ein vorhandene Prozedur um 70 % geschrumpft).
Delphi-Quellcode:
Statt zel könnte man sicher auch RecNo verwenden, habe aber nicht getestet, ob's auch bei gefilterten Tabellen noch funktioniert.
procedure TFBrowser.Tabellenspaltenminimieren1Click(Sender: TObject);
const chkanz = 300; // CHecK ANZahl von Datensätzen zur Beschränkung des Zeitaufwandes maxfldanz = 100; // max. Anz. der Felder, die betrachtet werden minwidth = 20; // min. Breite korrwidth = 10; // Korr. der Spaltenbreite wg. besserer Optik var i, fcnt, // Field-Count aktrec, len : integer; farr : array[0..maxfldanz] of integer; begin // Tab1 - TTable if not Tab1.Active then exit; Tab1.DisableControls; aktrec := Tab1.RecNo; zel := 0; for i:=0 to maxfldanz do farr[i] := minwidth; Tab1.First; fcnt := Tab1.FieldCount; if fcnt > maxfldanz then fcnt := maxfldanz; while (not Tab1.EOF) and (zel < chkanz) do begin for i:=0 to fcnt-1 do begin len := dbg1.Canvas.TextWidth(dbg1.Columns.Grid.Fields[i].Text); if len > farr[i] then farr[i] := len; end; Tab1.Next; inc(zel); end; // dbg1 - TDBGrid for i := 0 to fcnt-1 do dbg1.Columns[i].Width := farr[i] + korrwidth; Tab1.RecNo := aktrec; Tab1.EnableControls; end; mfg eddy |
Hallöchen,
habe in einem Formular ein StringGrid, welches vom Hauptformular aus mit Daten gefüllt und anschließend angezeigt wird. Der Code zum Anpassen von ColWidth (siehe oben) funktioniert an sich wunderbar - aber immer erst beim zweiten Öffnen des entsprechenden Formulars! :( Was kann ich tun, damit die Ansicht schon beim ersten Aufruf stimmt? die Zaubermaus |
Re: StringGrid: ColWidth nach längsten Eintrag ausrichten
Hi Leute,
würde das Beispiel auch gern verwenden. Ich hab aber keinen blaßen Schimmmer in welches Ereignis ich es einfügen muß damit es funktioniert! Und vielleicht kann auch noch einer erklären welche Variablen und wo vor allem ich setzen muß! Danke Arma. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:55 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