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的方法没试过,估计也可以,只是要写一大堆代码.不过也给分,

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    SpringBoot2.x异步任务EnableAsync
    SpringBoot 整合thymeleaf
    SpringBoot 整合freemarker
    RabbitMQ的安装及入门使(Windows)
    jacoco-统计代码覆盖率并生成报告
    Spring Transactional
    [转]IIS7.5优化--提高线程数来适应高并发
    系统设计时考虑
    设计模式之策略模式
    接到一个新需求后的处理流程
  • 原文地址:https://www.cnblogs.com/jijm123/p/13767120.html
Copyright © 2011-2022 走看看