假如记录的字段宽度小于列标题的宽度,宽度就不变,反之就按记录中字段的宽度来显示!!!

解决方案 »

  1.   

    能不能说出个字段的数据类型来,这样好处理一些,要不就只能编个通用的了,要是想更详细,联系[email protected]
      

  2.   

    我想用INT型也行呀,计算出这字段值的最大长度
      

  3.   

    function DBGridRecordSize(mColumn: TColumn): Boolean;
    { 返回记录数据网格列显示最大宽度是否成功 }
    begin
      Result := False;
      if not Assigned(mColumn.Field) then Exit;
      mColumn.Field.Tag := Max(mColumn.Field.Tag,
      TDBGrid(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText));
      Result := True;
    end; { DBGridRecordSize }function DBGridAutoSize(mDBGrid: TDBGrid; mOffset: Integer = 5): 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;
        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;
      end;
      Result := True;
    end; { DBGridAutoSize }
    procedure TfrmBrowse.grdBrowseDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      DBGridRecordSize(Column);
    end;procedure TfrmBrowse.btnAdjustClick(Sender: TObject);
    begin
      DBGridAutoSize(grdBrowse);
    end;