Hallo Leute,
ich habe das Ganze mal noch auf ein DBGrid umgesetzt (und damit ein vorhandene Prozedur um 70 % geschrumpft).
Delphi-Quellcode:
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;
Statt zel könnte man sicher auch RecNo verwenden, habe aber nicht getestet, ob's auch bei gefilterten Tabellen noch funktioniert.
mfg
eddy