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 表資料記錄的第一列...
 
...
...

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;
 

沒有留言:

張貼留言