轻松实现DBGrid的多表头

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  用法:
  设置DBGrid的Column的Caption属性
  例如:Column1的Caption为111|222
  Column2的Caption为111|333
  那么Column1和Column2公用一个表头111
  unit ADBGrid;
  interface
  uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, DBGrids, Math;
  type
  TADBGrid = class(TDBGrid)
  private
  { Private declarations }
  //兄弟列子标题,当前列子标题
  BrerLayerTitles, CurLayerTitles: TStringList;
  SaveFont: TFont;
  //根据当前数据列号和表头的层号获取表头的区域
  function TitleLayerRect(LayerTitles: TStrings; TitleRect: TRect; LayerID, ACol: Integer): TRect;
  //解出当前数据列标题为子标题并返回标题层数(子标题数)
  function ExtractSubTitle(LayerTitles: TStrings; ACol: Integer): Integer;
  protected
  { Protected declarations }
  procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
  procedure Paint; override;
  public
  { Public declarations }
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
  published
  { Published declarations }
  end;
  procedure Register;
  implementation
  procedure Register;
  begin
  RegisterComponents(/'Samples/', [TADBGrid]);
  end;
  constructor TADBGrid.Create(AOwner: TComponent);
  begin
  inherited;
  BrerLayerTitles := TStringList.Create;
  curLayerTitles := TStringList.Create;
  SaveFont := TFont.Create;
  end;
  destructor TADBGrid.Destroy;
  begin
  BrerLayerTitles.Free;
  curLayerTitles.Free;
  SaveFont.Free;
  inherited;
  end;
  procedure TADBGrid.DrawCell(ACol, ARow: Integer; ARect: TRect;
  AState: TGridDrawState);
  var
  SubTitleRT, CaptionRt, IndicatorRT: TRect;
  Column: TColumn;
  SubTitle: string;
  i: Integer;
  begin
  if (ARow = 0) and (ACol > 0) then

上一页1234下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答