Как определить, ли курсор мыши в управлении

Я начал использовать действительно прохладный межплатформенный SDK под названием EdgeLib. Это позволяет Вам использовать простой API, и можно скомпилировать проекты во множество платформ: Windows Mobile Pocket PC, Windows Mobile Smartphone, Серия 60 Symbian, Серия 80, Серия 90, UIQ Symbian, Gamepark Holdings GP2X, Gizmondo и рабочий стол Windows. Я знаю iPhone, Blackberry, и Android не находится в том списке, но разработчики упомянули, что эти платформы находятся на своей дорожной карте.

12
задан smartins 12 November 2009 в 15:46
поделиться

2 ответа

Mouse.CursorPos возвращает положение мыши в координатах экрана. Вы можете преобразовать это в «клиентские» координаты, то есть координаты относительно элемента управления, вызвав метод элемента управления ScreenToClient .

Таким образом, у вас будет примерно такой код:

var
  MyPoint : TPoint;
begin
  MyPoint := ScrollBox1.ScreenToClient(Mouse.CursorPos);
  if PtInRect(ScrollBox1.ClientRect, MyPoint) then
  begin
    // Mouse is inside the control, do something here
  end;
end;

Это позволит вам знать, находится ли он внутри элемента управления.

Судя по всему, вы реализуете прокрутку с помощью колеса мыши? Если так, не надо Не забудьте вызвать SystemParametersInfo с помощью SPI_GETWHEELSCROLLLINES или, возможно, если это в вашей версии Delphi, Mouse.WheelScrollLines , чтобы узнать, сколько строк прокручивать за каждое приращение колеса мыши . Что это означает для вашего приложения, вероятно, зависит от того, что у вас есть в полосе прокрутки.

Если вы планируете также реализовать прокрутку со средним щелчком и перетаскиванием (здесь я предполагаю, это намного больше, чем вы спрашивается о), вы можете захотеть получать события мыши после того, как мышь покинет элемент управления или форму, например, пока пользователь не отпустит кнопку. В таком случае ознакомьтесь с SetCapture и ReleaseCapture и в этой статье . (В этой статье они используются, чтобы увидеть, находится ли указатель мыши над элементом управления (там, WheelScrollLines и Захват . Я не уверен, как недавно они были добавлены - возможно, я просто не замечал их раньше - но, полагая, что они новые, и поскольку вы не говорите, какую версию Delphi вы используете, я оставляю над текстом и ссылками на WinAPI. Если вы используете последнюю версию, просмотрите документацию TMouse .)

WheelScrollLines и Захват . Я не уверен, как недавно они были добавлены - возможно, я просто не замечал их раньше - но, полагая, что они новые, и поскольку вы не говорите, какую версию Delphi вы используете, я оставляю над текстом и ссылками на WinAPI. Если вы используете последнюю версию, просмотрите документацию TMouse .)

23
ответ дан 2 December 2019 в 06:26
поделиться

Мои знания Delphi немного устарели, но разве не должно быть событий MouseEnter, MouseLeave? Быстрый поиск в Google показал это . Это вам поможет?

0
ответ дан 2 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: