2013-03-07 40 views

回答

4

类似的东西...

Procedure FitGrid(Grid:TDBGrid); 
Const 
C_Add=3; 
var 
ds:TDataset; 
bm:TBookmark; 
i:Integer; 
w:Integer; 
a:Array of Integer; 
begin 
    ds := Grid.DataSource.DataSet; 
    if Assigned(ds) then 
     begin 
     ds.DisableControls; 
     bm := ds.GetBookmark; 
     try 

     ds.First; 
     SetLength(a,Grid.Columns.Count); 
     ZeroMemory(@a[0],SizeOf(Integer)*Length(a)); 
     while not ds.Eof do 
      begin 
      for I := 0 to Grid.Columns.Count - 1 do 
       begin 
        if Assigned(Grid.Columns[i].Field) then 
        begin 
        w := Grid.Canvas.TextWidth(ds.FieldByName(Grid.Columns[i].Field.FieldName).DisplayText); 
        if a[i] < w then a[i] := w + C_Add; 
        end; 

       end; 
      ds.Next; 
      end; 
     for I := 0 to Grid.Columns.Count - 1 do Grid.Columns[i].Width := a[i]; 
     ds.GotoBookmark(bm); 
     finally 
      ds.FreeBookmark(bm); 
      ds.EnableControls; 
     end; 
     end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 

begin 
    FitGrid(DBgrid1) 
end;