zoukankan      html  css  js  c++  java
  • 在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的方法没试过,估计也可以,只是要写一大堆代码.不过也给分,

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    Mongodb---记一次事故故障
    扎克伯格的中文夜:想要成功就不能放弃
    TTS-零基础入门之停止列表中单条语音播报
    卡尔曼滤波(Kalman Filter) 的进一步讨论
    2014.8.12-AKKA和Actor model 分布式开发环境学习小结
    c# 删除程序占用的文件,强力删除文件,彻底删除文件,解除文件占用
    Spring源代码解析和配置文件载入
    java调用c++ dll出现中文乱码
    Android任务栈TaskStack
    应用中清理缓存应用实现
  • 原文地址:https://www.cnblogs.com/jijm123/p/13767120.html
Copyright © 2011-2022 走看看