- 註冊時間
 - 2006-3-13 
 - 最後登錄
 - 2025-7-23 
 - 在線時間
 - 675 小時 
 - 閱讀權限
 - 200 
 - 積分
 - 417 
 - 帖子
 - 1109 
 - 精華
 - 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.
 
  複製代碼 |   
 
  
 |