Obter a célula de um StringGrid que está sob o cursor do mouse no Delphi
Inclua na seção uses: Windows
{ Esta procedure pega a linha e coluna da célula onde estiver o mouse. Valores negativos para Linha ou Coluna indicam que o mouse está fora da área cliente do StringGrid } procedure MouseCell(Grid: TStringGrid; var Coluna, Linha: integer); var Pt: TPoint; begin GetCursorPos(Pt); Pt := Grid.ScreenToClient(Pt); if PtInRect(Grid.ClientRect, Pt) then Grid.MouseToCell(Pt.X, Pt.Y, Coluna, Linha) else begin Coluna := -1; Linha := -1; end; end; { Exemplo de uso: - Coloque um botão no form; - Altere o evento OnClick deste botão como abaixo: } procedure TForm1.Button1Click(Sender: TObject); var Coluna, Linha: integer; begin MouseCell(StringGrid1, Coluna, Linha); if (Coluna >= 0) and (Linha >= 0) then Caption := 'Coluna: ' + IntToStr(Coluna) + ' - ' + 'Linha: ' + IntToStr(Linha); else Caption := 'O mouse não está no StringGrid'; end; { Para testar: - Execute o programa; - Posicione o cursor do mouse sobre alguma célula do StringGrid; - Pressione TAB até chegar ao botão e pressione ENTER; - O resultado será mostrado no Caption do form; }
Note que a procedure MouseCell usa um valor negativo (-1) para coluna e linha se o mouse não estiver sobre o StringGrid.