本帖最后由 u010256554 于 2013-05-27 15:36:26 编辑

解决方案 »

  1.   


    用下面的函数吧,自动调整DBGrid的列宽,调用方法:DBGridAutoSize(DBGrid1);
    function DBGridAutoSize(mDBGrid: TDBGrid; mOffset: Integer = 15): Boolean;
    { 返?????自?适??度是?成? }
    var
      I: Integer;
    begin
      Result := False;
      if not Assigned(mDBGrid) then
        Exit;
      if not Assigned(mDBGrid.DataSource) then
        Exit;
      if not Assigned(mDBGrid.DataSource.DataSet) then
        Exit;
      if not mDBGrid.DataSource.DataSet.Active then
        Exit;
      for I := 0 to mDBGrid.Columns.Count - 1 do
      begin
        if not mDBGrid.Columns[I].Visible then
          Continue;
        DBGridRecordSize(mdbgrid.Columns[i]);
        if Assigned(mDBGrid.Columns[I].Field) then
          mDBGrid.Columns[I].Width := Max(mDBGrid.Columns[I].Field.Tag,
            mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption)) + mOffset
        else
          mDBGrid.Columns[I].Width :=
            mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption) + mOffset;
        mDBGrid.Refresh;
        //  Application.ProcessMessages;
      end;
      Result := True;
    end; { DBGridAutoSize }