Я начал использовать действительно прохладный межплатформенный SDK под названием EdgeLib. Это позволяет Вам использовать простой API, и можно скомпилировать проекты во множество платформ: Windows Mobile Pocket PC, Windows Mobile Smartphone, Серия 60 Symbian, Серия 80, Серия 90, UIQ Symbian, Gamepark Holdings GP2X, Gizmondo и рабочий стол Windows. Я знаю iPhone, Blackberry, и Android не находится в том списке, но разработчики упомянули, что эти платформы находятся на своей дорожной карте.
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
.) Мои знания Delphi немного устарели, но разве не должно быть событий MouseEnter, MouseLeave? Быстрый поиск в Google показал это . Это вам поможет?