когда-то делал, только для Memo, но можно использовать и для скролбокса, соответственно, Memo1 в коде нужно заменить на MyScrollBox
| Код | procedure WMMouseWheel(var Mes: TWMMouseWheel); message WM_MOUSEWHEEL; function IsCursor:boolean;
...........................
{Определение положения курсора - над текстом или нет} function TForm4.IsCursor: boolean; var R: TRect; P: TPoint; begin GetCursorPos(P); GetWindowRect(Memo1.Handle,R); result := ((p.X >= R.Left) and (p.X <= R.Right)) and ((p.Y >= r.Top) and (p.Y <= r.Bottom)); end;
{Реакция на прокрутку колесика мыши} procedure TForm4.WMMouseWheel(var Mes: TWMMouseWheel); var i,j,p: integer; begin if IsCursor then {Если курсор находится над текстом, то начать прокрутку} begin {Определить направление прокрутки} if Mes.WheelDelta < 0 then p := SB_LINEDOWN else p := SB_LINEUP; {Определить диапазон прокрутки за один щелчок колесика - системная настройка} SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @j, 0); {Если получено значение -1, то прокручивать на целую страницу} if j < 0 then begin j := 1; p := p + SB_PAGEUP; end; {Послать заданное количество сообщений на прокрутку} for i := 1 to j do Memo1.Perform(WM_VSCROLL,p,0); end; end;
|
количество линий на прокрутку определяется системными настройками мыши |