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