Hallo BenjaminHelbig,
ich verwende zur Lösung dieses Problems folgende Prozedur, getestet und funktionsfähig:
Code:
procedure UP_MinTabRow(Tab : TTable; dbg : TDBGrid);
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,
zel,
len : integer;
farr : array[0..maxfldanz] of integer;
begin
// Tab1 - TTable
if not Tab.Active then exit;
Tab.DisableControls;
aktrec := Tab.RecNo;
zel := 0;
for i:=0 to maxfldanz do farr[i] := minwidth;
Tab.First;
fcnt := Tab.FieldCount;
if fcnt > maxfldanz then fcnt := maxfldanz;
while (not Tab.EOF) and (zel < chkanz) do begin
for i:=0 to fcnt-1 do begin
len := dbg.Canvas.TextWidth(dbg.Columns.Grid.Fields[i].Text);
if len > farr[i] then farr[i] := len;
end;
Tab.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;
Tab.RecNo := aktrec;
Tab.EnableControls;
end;
mfg
eddy