比如我有一个名称字段设置的长度是50,我在DBGRID里面显示1条记录,这个名称只有3个字,我想让DBGRID自动把这个字段的宽度缩到3个字宽。或者双击列分隔线缩小也可以。

解决方案 »

  1.   

    可以customerdraw中计算每个单元格输出的文字宽度(canvas有个属性可以计算),如果比当前列宽大,就将列宽重新设置,如此,列宽即是一个刚好合适的值
      

  2.   

    在customerdraw中计算每个单元格输出的文字宽度(canvas有个属性可以计算),如果比当前列宽大,就将列宽重新设置
      

  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 TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
    DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
    DBGridRecordSize(Column);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    DBGridAutoSize(DBGrid1);
    end;
    ///////使用示例结束
      

  4.   

    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;
    可以换成if not mDbGrid.DataSource.DataSet.Isempty then 
              Exit;吗?
      

  5.   

    请问customerdraw在哪里?什么意思?