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;