在DBGrid中,怎样判断焦点离开了某个单元格?(100分)

https://wedelphi.com/t/99347/

在DBGrid中,怎样判断焦点离开了某个单元格?
onColexit事件只能判断用键盘到移到另一列,还不能判断mouse离开单元格,
我想做的是:不论是mouse或用键盘离开某个单元格做点别的事情

那个应该可以的呀,
OnColExit/OnAfterScroll
行列移动,你做处理就可以了

//获取单元格的行号:DBGrid1.DataSource.DataSet.RecNo
//获取单元格的列号:DBGrid1.SelectedIndex+1
//示例如下,注意:此事件在同列时,不响应
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
caption:='('+inttostr(DBGrid1.DataSource.DataSet.RecNo)+'行 : '+inttostr(DBGrid1.SelectedIndex+1)+'列)';
end;


//判断是否移到另一列,对mouse和keyboard均有效
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
showmessage('移到另一列');
end;

//判断是否用键盘移到另一行
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if DBGrid1.DataSource.DataSet.RecNo<>i then showmessage('key移到另一行');
i:=DBGrid1.DataSource.DataSet.RecNo;
end;

//判断是否用mouse移到另一行
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if DBGrid1.DataSource.DataSet.RecNo<>i then showmessage('mouse移到另一行');
i:=DBGrid1.DataSource.DataSet.RecNo;
end;

//注: i是private变量 ,integer型

判断前后所在的行数和列数, 要记录前一次选中的行数和列数
BlackHand所提供的定位col和Row不太好, 
提供下法:
先定义一个类, 从TDBGrid继承
Type
TMyGrid=Class(TDBGrid)

用法:
行数: r:=TMyGrid(dbgrid1).Row
列数: c:=TMyGrid(dbgrid1).Col

如果本次获取单元格的行号、列号与上次获取单元格的行号、列号不同的话,那就说明:
焦点离开了原来的单元格

根据twos的说法,经试用.
dbgrid1.OnColExit及tdataset.OnBeforScroll获得成功.
blackhand的方法没试过,估计也可以,只是要写一大堆代码.不过也给分,

posted on 2020-10-04 14:00  癫狂编程  阅读(312)  评论(0编辑  收藏  举报

导航

好的代码像粥一样,都是用时间熬出来的