bestlong 怕失憶論壇
標題:
在TDBGrid中為修改過的紀錄作標示
[打印本頁]
作者:
bestlong
時間:
2006-6-21 12:02
標題:
在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;
procedure TForm1.FormCreate(Sender: TObject);
begin
I := 0; //初始化陣列起點
end;
end.
複製代碼
歡迎光臨 bestlong 怕失憶論壇 (http://www.bestlong.idv.tw/)
Powered by Discuz! X1.5