我有一个启用了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
当我重新绘制整个网格时,这已得到纠正: