Консультация № 55947
19.09.2006, 12:56
0.00 руб.
0 2 2
Доброго времени суток. Подскажите пожалуста как заставить TScrollBar прокручиваться по движению ролика мыши

Обсуждение

Неизвестный
19.09.2006, 15:11
общий
это ответ
Здравствуйте, VNos!
Можно обработать OnMouseWheel.
Если бросить на форму Form1 скроллер Scroll1:TScrollBar, то в обработчике OnMouseWheel следующий код будет скроллировать компонент Scroll1. Аналогичный принцип присобите для своего приложения:

procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
ScrollBar1.Position:=ScrollBar1.Position-WheelDelta div WHEEL_DELTA;
Handled:=true;
end;

WHEEL_DELTA - это константа Microsoft (=120), это порог одного шага поворота колесика (он ведь вращается неплавно) - сделано для увеличения точности отслеживания поворота в будущем, а пока можно забить и просто делить на 120.
WheelDelta положительна, если пользователь крутит вверх. И еще. Событие OnMouseWheel не посылается элементу без фокуса (по крайней мере, так раньше в документации писали).
Неизвестный
19.09.2006, 18:20
общий
это ответ
Здравствуйте, VNos!
В приложении предлагаю отлавливать событие колеса мыши и подменять его на событие нажатия "стрелок" вверх-вниз.

Приложение:
{....} public procedure AppMessage(var Msg: TMsg; var Handled: Boolean); {.....................................................................} procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean); var i: SmallInt; begin if Msg.message = WM_MOUSEWHEEL then begin Msg.message := WM_KEYDOWN; Msg.lParam := 0; i := HiWord(Msg.wParam); if i > 0 then Msg.wParam := VK_UP else Msg.wParam := VK_DOWN; Handled := False; end; end; {....................................................................}//------------------------------------------------------//------------------------------------------------------//В файл проекта нужно добавить//эту строчку: Application.OnMessage := Form1.AppMessage;
Форма ответа