Предположим вам необходимо разместить на форме большое количество объектов, однако размеры формы не позволяют этого сделать. В этом случае удобно воспользоваться компонентом TScrollBox, т.к. он позволит вам прокручивать его содержимое (как, к примеру, вы прокручиваете веб-страницу в браузере). Все бы хорошо, однако, когда вы захотите прокрутить ScrollBox с помощью колесика мыши, этого не произойдет. Чтобы "активировать" эту возможность воспользуемся следующим кодом:
В разделе Implementation: procedure TMainForm.WMMOUSEWHEEL(var Msg: TMessage); var zDelta: Integer; begin inherited; if WindowFromPoint(Mouse.CursorPos) <> ScrollBox1.Handle then Exit; if Msg.WParam < 0 then zDelta := -10 else zDelta := 10; with ScrollBox1 do begin if ((VertScrollBar.Position = 0) and (zDelta > 0)) or ((VertScrollBar.Position = VertScrollBar.Range - ClientHeight) and (zDelta < 0)) then Exit; ScrollBy(0, zDelta); VertScrollBar.Position := VertScrollBar.Position - zDelta; end; end;
Описанный выше пример позволяет осуществлять вертикальную прокрутку ScrollBox колесиком мыши когда ее указатель находится непосредственно над полем ScrollBox либо над ползунком прокрутки. Если же вы попробуете прокрутить, поместив курсор над каким-либо из объектов, расположенных на поле ScrollBox, то этого не произойдет. Чтобы содержание прокручивалось при любом расположении мыши, необходимо убрать строчку:
if WindowFromPoint(Mouse.CursorPos) <> ScrollBox1.Handle then Exit;