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;
沒有留言:
張貼留言