2015-08-21

【Delphi】記錄列跟著滑鼠移動

參考資料 -- Selecting and highlighting a row in a DBGrid - "OnMouseOverRow" 


TDBGrid 無法知道當前滑鼠指在哪一列,但有個例外:當程式與類別碼在同一個檔案內時,程式可以看到該類別原本不開放的內部資訊。

繞個彎,取得 TBGrid 內部資訊。

其中,TGridCoord 資料型態為 record,用來得知某一儲存格在 DBGrid 內的座標值,
TGridCoord.X 為直欄,0 表指標欄, 1 表資料記錄的第一欄...
TGridCoord.Y 為橫列,0 表標題列, 1 表資料記錄的第一列...
  1.  
  2. ...
  3. ...
  4.  
  5. type
  6. THackDBGrid = class(TDBGrid);
  7.  
  8. ...
  9. ...
  10. procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  11. var
  12. gc: TGridCoord;
  13. begin
  14. gc:= DBGrid1.MouseCoord(x, y); // MouseCoord 是一個 method,繼承自 TCustomGrid
  15. // 用以將滑鼠在螢幕上的座標值轉換為 DBGrid 的儲存格座標
  16. if (gc.X>0) AND (gc.Y>0) then
  17. begin
  18. Caption := 'gc.x:' + IntToStr(gc.X) + ', gc.y:' + IntToStr(gc.Y);
  19. DBGrid1.DataSource.DataSet.MoveBy(gc.Y - THackDBGrid(DBGrid1).Row);
  20. if (DBGrid1.DataSource.DataSet.FieldByName('欄位名稱').AsString='值') then
  21. Screen.Cursor := crNoDrop
  22. else
  23. Screen.Cursor := crDefault;
  24. end;
  25.  
  26. end;
  27.  

沒有留言:

張貼留言