Tecnobyte Informática

Delphi - Teclado e Mouse

Como detectar se o cursor do mouse está em determinado controle?

Inclua na seção uses: Windows

{ Os exemplos abaixo verificam se o cursor do mouse está em
  Button1: }

{ Solução 1: }
var
  Pt: TPoint;
  Rct: TRect;
begin
  GetCursorPos(Pt);
  GetWindowRect(Button1.Handle, Rct);
  if PtInRect(Rct, Pt) then
    { Está no botão }
  else
    { NÃO está no botão }
end;

{ Solução 2: }
var
  Pt: TPoint;
begin
  GetCursorPos(Pt);
  if WindowFromPoint(Pt) = Button1.Handle then
    { Está no botão }
  else
    { Não está no botão }
end;

Observações

A API GetWindowRect obtém o retângulo (TRect) ocupado por uma janela. Podemos usar GetClientRect para obter o somente da parte cliente da janela. Podemos também usar a propriedade BoundsRect que existe na maioria dos componentes visuais, ou mesmo informar qualquer outro retângulo da tela. Se usarmos a propriedade BoundsRect, precisaremos converter as coordenadas clientes para coordenadas de tela (com a função ClientToScreen). Um lembrete: a solução 2 só poderá ser aplicada a controles ajanelados.