【Delphi-ADO】Delphi数据网格自动适应宽度

来源:互联网 发布:免费点歌软件 编辑:程序博客网 时间:2024/06/07 00:48
  1. (*//
  2. 标题:数据网格自动适应宽度
  3. 说明:使用DBGrid不可不看
  4. 设计:Zswang
  5. 日期:2002-03-04
  6. 支持:wjhu111@21cn.com
  7. //*)
  8. ///////Begin Source
  9. uses
  10.   Math;
  11. function DBGridRecordSize(mColumn: TColumn): Boolean;
  12. { 返回记录数据网格列显示最大宽度是否成功 }
  13. begin
  14.   Result := False;
  15.   if not Assigned(mColumn.Field) then Exit;
  16.   mColumn.Field.Tag := Max(mColumn.Field.Tag,
  17.     TDBGrid(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText));
  18.   Result := True;
  19. end; { DBGridRecordSize }
  20. function DBGridAutoSize(mDBGrid: TDBGrid; mOffset: Integer = 5): Boolean;
  21. { 返回数据网格自动适应宽度是否成功 }
  22. var
  23.   I: Integer;
  24. begin
  25.   Result := False;
  26.   if not Assigned(mDBGrid) then Exit;
  27.   if not Assigned(mDBGrid.DataSource) then Exit;
  28.   if not Assigned(mDBGrid.DataSource.DataSet) then Exit;
  29.   if not mDBGrid.DataSource.DataSet.Active then Exit;
  30.   for I := 0 to mDBGrid.Columns.Count - 1 do begin
  31.     if not mDBGrid.Columns[I].Visible then Continue;
  32.     if Assigned(mDBGrid.Columns[I].Field) then
  33.       mDBGrid.Columns[I].Width := Max(mDBGrid.Columns[I].Field.Tag,
  34.         mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption)) + mOffset
  35.     else mDBGrid.Columns[I].Width :=
  36.       mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption) + mOffset;
  37.     mDBGrid.Refresh;
  38.   end;
  39.   Result := True;
  40. end; { DBGridAutoSize }
  41. ///////End Source
  42. ///////Begin Demo
  43. procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  44.   DataCol: Integer; Column: TColumn; State: TGridDrawState);
  45. begin
  46.   DBGridRecordSize(Column);
  47. end;
  48. procedure TForm1.Button1Click(Sender: TObject);
  49. begin
  50.   DBGridAutoSize(DBGrid1);
  51. end;
 
原创粉丝点击