![]() |
Spaltenbreite automatisch bestimmen
Hallo
wie kann ich in einem DBGrid sie Spaltenbreite automatisch bestimmen. Die Feldlänge soll so breit angzeigt werden wie lang der längste Feldinhalt in der Spalte ist. wie stell ich das ein? mfg matthias :roll: |
Re: Spaltenbreite automatisch bestimmen
Hallo Matthias,
bei einmem DBGrid wird das sicher schwer. Du müsstest jeden Datensatz durchlaufen um die größte Breite eies Eintrages zu bestimmen und dann die Breite der Spalte anpassen. |
Re: Spaltenbreite automatisch bestimmen
Oder einfach die Zeichen jedes Datensatzes überprüfen wenn sie größer sind als die die du schon hast dann verbreiterst du die Spalte wenn nicht dann nicht. Dann ist sie am Schluss so breit wie das Feld mit den meisten Zeichen drin.
|
Re: Spaltenbreite automatisch bestimmen
Zitat:
|
Re: Spaltenbreite automatisch bestimmen
hallo mathias!
schau bei den ![]() mfg, stefan |
Re: Spaltenbreite automatisch bestimmen
also ist dies nichts so ohne weiteres möglich
das problem liegt darin das ich ein textfeld mit einer länge von 120 zeichen habe und das dann immer notwendig ist auch wenn nur ein eintrag mit 3 zeichen drin steht nach rechts zu scrollen um auch die anderen felder zu sehen. das wollte ich damit verhindern mfg matthias |
Re: Spaltenbreite automatisch bestimmen
Hallo superstar025,
ich habe das so gelöst:
Code:
Ist vielleicht nicht ganz perfekt, funktioniert aber trotzdem.
procedure MinRow(dbg : TJvDBGrid);
const chkanz = 300; // CHecK ANZahl von Datensätzen zur Beschränkung des Zeitaufwandes maxfldanz = 50; // max. Anz. der Felder, die betrachtet werden minwidth = 20; // min. Breite korrwidth = 10; //10; // Korr. der Spaltenbreite wg. besserer Optik var i, fcnt, // Field-Count aktrec, zel, len : integer; farr : array[0..maxfldanz] of integer; begin // Tab1 - TTable // Tab ersetzen durch (TAdsTable((dbg as TJvgDBGrid).DataSource.DataSet) // dbg ersetzen durch (dbg as TJvgDBGrid) if TAdsTable(dbg.DataSource.DataSet).Active then begin TAdsTable(dbg.DataSource.DataSet).DisableControls; aktrec := TAdsTable(dbg.DataSource.DataSet).RecNo; for i:=0 to maxfldanz do farr[i] := minwidth; TAdsTable(dbg.DataSource.DataSet).First; fcnt := TAdsTable(dbg.DataSource.DataSet).FieldCount; if fcnt > maxfldanz then fcnt := maxfldanz; if fcnt > dbg.Columns.Count then fcnt := dbg.Columns.Count; zel := 0; while (not TAdsTable(dbg.DataSource.DataSet).EOF) and (zel < chkanz) do begin for i:=0 to fcnt-1 do begin len := TrueFontWidth(dbg.Font, dbg.Columns.Grid.Fields[i].Text); if len > farr[i] then farr[i] := len; end; TAdsTable(dbg.DataSource.DataSet).Next; inc(zel); end; for i := 0 to fcnt-1 do begin try dbg.Columns[i].Width := farr[i] + korrwidth; except dbg.Columns[i].Width := dbg.Columns[i].Width; end; end; TAdsTable(dbg.DataSource.DataSet).RecNo := aktrec; TAdsTable(dbg.DataSource.DataSet).EnableControls; end; end; // of MinRow // uses Graphics, Windows function TrueFontWidth(fnt: TFont; const text:string): Integer; var dc: hdc; //uses Windows tsize : Windows.TSize; begin dc := GetDC(0); SelectObject(DC, fnt.Handle); GetTextExtentPoint32(dc, PChar(text), Length(text), tsize); ReleaseDC(0, DC); Result := tsize.cx; end; Getestet ist es mit Paradox- und dBase-Datenbanken sowie ADS (Advantage Database Server). Diese Fassung ist für das Jedi-DBGrid und ADS ausgelegt. Die vorige Fassung ![]() mfg eddy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 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