![]() | ||
Как сделать прокрутку в TScrollBox колесиком мыши | ||
Предположим вам необходимо разместить на форме большое количество объектов, однако размеры формы не позволяют этого сделать. В этом случае удобно воспользоваться компонентом TScrollBox, т.к. он позволит вам прокручивать его содержимое (как, к примеру, вы прокручиваете веб-страницу в браузере). Все бы хорошо, однако, когда вы захотите прокрутить ScrollBox с помощью колесика мыши, этого не произойдет. Чтобы "активировать" эту возможность воспользуемся следующим кодом: | ||
Вариант 1 | ||
Необходимо обработать события OnMouseWheelDown и OnMouseWheelUpкомпонента ScrollBox. | ||
//прокручиваем вниз procedure TMainForm.ScrollBox1MouseWheelDown(Sender: TObject; //прокручиваем вверх procedure TMainForm.ScrollBox1MouseWheelUp(Sender: TObject; Shift: TShiftState; | ||
Вариант 2 | ||
В разделе Private запишем: | ||
private WM_MOUSEWHEEL; | ||
В разделе 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; | ||
По материалам Delphisources.ru | ||
22.03.2011 DelphiCode.org |