delphi dbgrideh 根据标题宽度自动调整列宽

delphi5年前 (2020)发布 admin
580 0

1.uses Math(我在xp+d7下没有引用该文件貌似也能执行,原文是要引用的,大家可以测试一下)

2.先定义两个函数

    function Tmain_khjx.DBGridAutoSize(mDBGrid: TDBGrideh;
  mOffset: Integer): 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 }

/////////////////////////////////////////////////////////////////

function Tmain_khjx.DBGridRecordSize(mColumn: TColumneh): Boolean;
begin  //返回数据网格自动适应宽度是否成功
    Result := False;
    if not Assigned(mColumn.Field) then Exit;
   mColumn.Field.Tag := Max(mColumn.Field.Tag,
   TDBGrideh(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText));
    Result := True;

end;

3. 在DBGridEh1DrawColumnCell的事件中写上一句代码: DBGridRecordSize(Column);

    在想让dbgrideh自动调整列宽的事件中写上 :DBGridAutoSize(DBGridEh1,12);

   我是在窗体的onshow事件中写的,也可以在按钮等事件总写

4.注意:dbgrideh的autofitcolwidths 的属性必须设置成false

© 版权声明

相关文章