StringGridでマウスがどのセルに位置しているのかを調べる
72 StringGridMouseToCell 動作確認 Delphi2007 更新日 2008/02/02(土)

MouseToCellプロパティにマウス位置を与える事で
どのセル上にマウスカーソルがあるのかを知ることができます。

テストコードを書いてみました。
実際に動作させてみるとよくわかります。

────────────────────
var
  ColBuffer, RowBuffer: Integer;

procedure TForm1.StrGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  ACol, ARow: Longint;
begin
  TStringGrid(Sender).MouseToCell(X, Y, ACol, ARow);

  if (ColBuffer <> ACol) or (RowBuffer <> ARow) then
  begin
    ColBuffer := ACol; RowBuffer := ARow;
    Memo1.Lines.Add('Col:'+IntToStr(ACol) +' Row:'+IntToStr(ARow));
  end;
end;

procedure TForm1.StrGrid1MouseEnter(Sender: TObject);
begin
  Memo1.Lines.Add('MouseEnter');
end;

procedure TForm1.StrGrid1MouseLeave(Sender: TObject);
begin
  Memo1.Lines.Add('MouseLeave');
end;
────────────────────

動作確認画面です。


セルが存在しない場所では
ACol=-1、ARow=-1という値がとれますし

MouseEnterやMouseLeaveのイベントは
StringGridのスクロールバー部分以外で
動作することもわかります。