现在的位置: 首页 > 综合 > 正文

关于表格控件的OnDrawCell事件

2018年04月11日 ⁄ 综合 ⁄ 共 1346字 ⁄ 字号 评论关闭

    前段时间写一个程序多次用到了表格控件显示数据。一般我们用表格控件来显示字符串和相关对象能使操作简单化。在窗体中添加一个TStringGrid对象,可完成文本数据的表格化。TStringGrid组件提供了许多可控制网格外观的属性,以及利用表格的结构响应用户操作的事件和方法。TStringGrid具有关联对象与网格中的每个字符串的作用,这些对象为用户封装了字符串表示的信息或行为。

    由于要将指定的格子内容用不同颜色标注,需要在其OnDrawCell事件中重绘表格内容。但OnDrawCell事件的触发机制、执行方式和事件参数具体是什么,组件大全没有说清楚,网上也道不出个所以然。实在没办法,自己拉了两控件做测试,才发现OnDrawCell事件执行是个很有意思的过程。

    以下是组件大全中关于OnDrawCell事件的说明:

 

    声明:

Type TDrawCellEvent=procedure (Sender:TObject;ACol,ARow:Longint;Rect:TRect;State:TGridDrawState) of object;

 Property OnDrawCell:TDrawCellEvent;

 

    当表格中的单元需要绘制时,触发该事件。Rect指定画布上单元的位置,ACol,ARow指定将要绘制单元的行列索引,State指示指定单元是否有输入焦点,是否被选中以及是否为固定单元。

    首先,在窗体上放一个TStringGrd和一个Memo,如下图所示。

 

    在TStringGridOnDrawCell事件中写下如下代码:

 

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

 Rect: TRect; State: TGridDrawState);

begin

 Memo1.Lines.Add(Format('列: %d,行: %d,矩形:(%d,%d,%d,%d)',

 [Acol,Arow,Rect.Left, Rect.Top, Rect.Right, Rect.Bottom])

 );

end;

 

    点击执行代码,由于窗体控件初始化会触发OnDrawCell事件,看到运行结果如下:

 

    该事件在窗体控件初始化时的执行过程如下图所示:

 

 

 

    第一行从左到右每个单元个格触发一次该事件,接着从第二行第一列开始从上到下每个单元格触发该事件一次,然后从第二行第二列开始重复上过程完成初始化重绘。所以整个初始化过程该事件被触发执行的次数等于TStringGrid的行列之积。

    当你用鼠标点击单元格时也会触发该事件两次,如下图所示:

 

 

 

 

 

 

 

    第一次点击单元(21)(列,行),触发之前选中单元(11)重绘,接着触发当前选中单元(21)重绘,第二次点击(32)执行同样的过程。

 

    以上就是表格控件的OnDrawCell事件触发机制与执行过程,有时候我们要重绘指定列时,使用该事件非常容易,如不同行(或列)着不同颜色,根据单元格内容显示不同颜色等等。

   
熟悉了该事件的触发机制与执行过程,你就能有针对的优化你的事件处理代码,使程序简单而实用。

 

 

 

 

 

 

 

 

 

抱歉!评论已关闭.