TDBGrid 無法知道當前滑鼠指在哪一列,但有個例外:當程式與類別碼在同一個檔案內時,程式可以看到該類別原本不開放的內部資訊。
繞個彎,取得 TBGrid 內部資訊。
其中,TGridCoord 資料型態為 record,用來得知某一儲存格在 DBGrid 內的座標值,
TGridCoord.X 為直欄,0 表指標欄, 1 表資料記錄的第一欄...
TGridCoord.Y 為橫列,0 表標題列, 1 表資料記錄的第一列...
...
...
type
THackDBGrid = class(TDBGrid);
...
...
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
gc: TGridCoord;
begin
gc:= DBGrid1.MouseCoord(x, y); // MouseCoord 是一個 method,繼承自 TCustomGrid
// 用以將滑鼠在螢幕上的座標值轉換為 DBGrid 的儲存格座標
if (gc.X>0) AND (gc.Y>0) then
begin
Caption := 'gc.x:' + IntToStr(gc.X) + ', gc.y:' + IntToStr(gc.Y);
DBGrid1.DataSource.DataSet.MoveBy(gc.Y - THackDBGrid(DBGrid1).Row);
if (DBGrid1.DataSource.DataSet.FieldByName('欄位名稱').AsString='值') then
Screen.Cursor := crNoDrop
else
Screen.Cursor := crDefault;
end;
end;
沒有留言:
張貼留言