在TDBGrid控件中为作修改过的记录进行标识!

思密达哦尼

思密达哦尼

2016-02-19 12:38

今天图老师小编给大家精心推荐个在TDBGrid控件中为作修改过的记录进行标识!教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~

  unit testDBG;

  interface

  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls,Types;

  type
    TForm1 = class(TForm)
      DBG: TDBGrid;
      ADOConnection1: TADOConnection;
      ADOTable1: TADOTable;
      DataSource1: TDataSource;
      procedure DBGDrawColumnCell(Sender: TObject; const Rect: TRect;
        DataCol: Integer; Column: TColumn; State: TGridDrawState);
      procedure DBGKeyPress(Sender: TObject; var Key: Char);
      procedure FormCreate(Sender: TObject);
    private
      { Private declarations }
    public
      { Public declarations }
    end;

  var
    Form1: TForm1;
  implementation

  {$R *.dfm}
  type
  MyRect=array[0..200] of Tpoint;
  var
  ME:MyRect;//记录已经修改过记录的单元格的左上叫的点
  i:integer;
  Cpoint:Tpoint;//当前单元格左上角的点

  procedure TForm1.DBGDrawColumnCell(Sender: TObject; const Rect: TRect;
    DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var
  J:integer;
  begin
    if (gdFocused in State) {or (gdSelected in State) or (gdFixed in state)} then
    begin
  {下面的语句是记录格当前活动单元格的左上角坐标}
      Cpoint.X:=rect.Left;
      cpoint.Y:=rect.Top;
    end;
    for J:=0 to I do
    begin
      if (rect.Top=me[j].Y) and (rect.left=me[j].X) then
      begin//判断该单元格是否存在于已修改的数组的记录中!
      dbg.Canvas.Brush.Color:=clRed;
      dbg.DefaultDrawColumnCell(rect,Datacol,column,state);
      end;
    end;
  end;

  procedure TForm1.DBGKeyPress(Sender: TObject; var Key: Char);
  {由于没有找到更好的记录点,所以如果修改的时候只按了一个按键的话将不会触发这个语句!
  因为第一次执行这个语句的时候数据还没有处于修改或者插入状态,本人只测试了修改状态,添加状态没测试过!}
  var
  J:integer;
  begin
    if dbg.DataSource.DataSet.State in [dsEdit, dsInsert] then
      begin//处于就该状态:
        for J:=0 to i do
        begin//判断该格是否已经记录了
          if (me[j].X=cpoint.X) and (me[j].Y=cpoint.Y) then
            exit;
        end;//如果没记录就把它记录下来!
        me[i].X:=cpoint.X;
        me[i].Y:=cpoint.Y;
        i:=i+1;
      end;
  end;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  procedure TForm1.FormCreate(Sender: TObject);
  begin
    I:=0;//初始化数组起点
  end;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  end.

  本人只是做了修改的测试,是成功的,这么少的代码肯定是不能符合大家的更高的需求,这里只是完成了最基本的功能,方便大家理解,有什么更高的要求当然是根据各人的需要,玩一些数字游戏罢了!大家可以把它修改成更安全,更好用的东西!

  谢谢大家的捧场!

展开更多 50%)
分享

猜你喜欢

在TDBGrid控件中为作修改过的记录进行标识!

编程语言 网络编程
在TDBGrid控件中为作修改过的记录进行标识!

在Word2003中通过添加文档修订来备注之前修改过的内容

软件教程 电脑应用 word
在Word2003中通过添加文档修订来备注之前修改过的内容

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在jsp中作HTTP认证的方法

Java JAVA基础
在jsp中作HTTP认证的方法

在SQL Server数据库中为标识(IDENTITY)列插入显式值

编程语言 网络编程
在SQL Server数据库中为标识(IDENTITY)列插入显式值

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在MFC中应用CTreeCtrl控件的技巧

C语言教程 C语言函数
在MFC中应用CTreeCtrl控件的技巧

在word中如何控制graph控件

电脑网络
在word中如何控制graph控件

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

用PHP实现文件上传

用PHP实现文件上传

COM程序编写入门(全文-3)

COM程序编写入门(全文-3)
下拉加载更多内容 ↓