bestlong 怕失憶論壇

 

 

搜索
bestlong 怕失憶論壇 論壇 Delphi 在TDBGrid中為修改過的紀錄作標示
查看: 3222|回復: 0
go

在TDBGrid中為修改過的紀錄作標示 [複製鏈接]

Rank: 9Rank: 9Rank: 9

1#
發表於 2006-6-21 12:02 |只看該作者 |倒序瀏覽 |打印
  1. unit testDBG;

  2. interface

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

  6. type
  7. TForm1 = class(TForm)
  8.   DBG: TDBGrid;
  9.   ADOConnection1: TADOConnection;
  10.   ADOTable1: TADOTable;
  11.   DataSource1: TDataSource;
  12.   procedure DBGDrawColumnCell(Sender: TObject; const Rect: TRect;
  13.   DataCol: Integer; Column: TColumn; State: TGridDrawState);
  14.   procedure DBGKeyPress(Sender: TObject; var Key: Char);
  15.   procedure FormCreate(Sender: TObject);
  16. private
  17.   { Private declarations }
  18. public
  19.   { Public declarations }
  20. end;

  21. var
  22.   Form1: TForm1;
  23. implementation

  24. {$R *.dfm}
  25. type
  26.   MyRect = array[0..200] of TPoint;
  27. var
  28.   ME: MyRect; //紀錄已經修改過紀錄的單元格的左上角的點
  29.   i: integer;
  30.   CPoint: TPoint;//當前單元個左上角的點

  31. procedure TForm1.DBGDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
  32. var
  33.   J:integer;
  34. begin
  35.   if (gdFocused in State) {or (gdSelected in State) or (gdFixed in state)} then
  36.   begin
  37.   {下面的語法是記錄格當前活動單元格的左上角座標}
  38.   CPoint.X := Rect.Left;
  39.   CPoint.Y := Rect.Top;
  40.   end;
  41.   for J := 0 to I do
  42.   begin
  43.     if (Rect.Top = me[j].Y) and (Rect.left = me[j].X) then
  44.     begin //判斷該單元格是否存在於已修改的陣列的紀錄中!
  45.       dbg.Canvas.Brush.Color := clRed;
  46.       dbg.DefaultDrawColumnCell(Rect,Datacol,column,state);
  47.     end;
  48.   end;
  49. end;

  50. procedure TForm1.DBGKeyPress(Sender: TObject; var Key: Char);
  51. {由於沒有找到更好的紀錄點,所以如果修改的時候只按了一個按鍵的話將不會觸發這個語句!
  52. 因為第一次執行這個語法的時候數據還沒有處於修改或者插入狀態,只測試了修改狀態,新增狀態沒測試過!}
  53. var
  54.   J:integer;
  55. begin
  56.   if dbg.DataSource.DataSet.State in [dsEdit, dsInsert] then
  57.   begin //處於修改狀態:
  58.     for J:=0 to i do
  59.     begin //判斷該格是否已經記錄了
  60.       if (me[j].X = CPoint.X) and (me[j].Y = CPoint.Y) then
  61.         exit;
  62.     end; //如果沒紀錄就把它記錄下來!
  63.     me[i].X := CPoint.X;
  64.     me[i].Y := CPoint.Y;
  65.     i := i + 1;
  66.   end;
  67. end;

  68. procedure TForm1.FormCreate(Sender: TObject);
  69. begin
  70.   I := 0; //初始化陣列起點
  71. end;

  72. end.
複製代碼
我是雪龍
http://blog.bestlong.idv.tw
http://www.bestlong.idv.tw
‹ 上一主題|下一主題

Archiver|怕失憶論壇

GMT+8, 2024-4-30 19:09 , Processed in 0.038343 second(s), 10 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc.