使用RangeSelect在TStringGrid中调用不完整的OnDrawCell

时间:2014-10-13 14:44:18

标签: delphi

我有一个启用了goRangeSelect的StringGrid和我自己的OnDrawCell程序。 但是当我开始使用shift和down键选择多行时,我遇到的问题是OnDrawCell仅在行的第一列调用,我的选择是在我按任意键之前。

这个问题是我在需要移除的聚焦单元格周围绘制一个矩形,因此我需要为旧行的每一列OnDrawCell

是否有可能为每一列获取OnDrawCell个事件,或者我能以其他方式解决此问题吗?

以下是一些演示此行为的exmaples。我使用Delphi 7:

我在一个空表单上放置了一个TMemo和一个TStringGird。在TStringGrid中,我使用以下代码激活goRowSelect和OnDrawCell的事件处理程序:

procedure TForm1.fGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
   memo1.lines.add(format('Row: %d, Col: %d',[Arow,Acol]));
end;

现在我选择第一行并按下shift +向下光标。在第一个光标向下后,我进入备忘录:

Row: 1, Col: 1   <---- Only the first col of row 1 is painted. Instead of all cols
Row: 2, Col: 1
Row: 2, Col: 2
Row: 2, Col: 3
Row: 2, Col: 4
Row: 2, Col: 1

再移3次+光标后,我得到以下图片。你看到除了第一个col(红色箭头)之外,虚线仍然存在。

Error http://imageshack.com/a/img673/2351/I4DUPK.jpg

当我重新绘制整个网格时,这已得到纠正:

AfterRepaint http://imageshack.com/a/img673/3766/jvyLg4.jpg

0 个答案:

没有答案