- 註冊時間
- 2006-3-13
- 最後登錄
- 2025-1-10
- 在線時間
- 673 小時
- 閱讀權限
- 200
- 積分
- 417
- 帖子
- 1107
- 精華
- 0
- UID
- 2
  
|
- 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;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- I := 0; //初始化陣列起點
- end;
- end.
複製代碼 |
|