Пятница, 18.07.2025, 05:15
Приветствую Вас Гость | RSS
delphicode.clan.su
Форма входа
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
 
 Как сделать прокрутку в TScrollBox колесиком мыши
  
 
Предположим вам необходимо разместить на форме большое 
количество объектов, однако размеры формы не позволяют этого 
сделать. В этом случае удобно воспользоваться компонентом 
TScrollBox, т.к. он позволит вам прокручивать его содержимое 
(как, к примеру, вы прокручиваете веб-страницу в браузере). 
Все бы хорошо, однако, когда вы захотите прокрутить ScrollBox 
с помощью колесика мыши, этого не произойдет. Чтобы 
"активировать" эту возможность воспользуемся следующим кодом:
 Вариант 1
 
Необходимо обработать события 
OnMouseWheelDown и OnMouseWheelUpкомпонента ScrollBox.
 

//прокручиваем вниз

procedure TMainForm.ScrollBox1MouseWheelDown(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
Scrollbox1.VertScrollBar.Position:= Scrollbox1.VertScrollBar.Position+4;
end;

//прокручиваем вверх

procedure TMainForm.ScrollBox1MouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
Scrollbox1.VertScrollBar.Position:= Scrollbox1.VertScrollBar.Position-4;
end;

  
 Вариант 2
 В разделе Private запишем:
 
 private
{ Private declarations }
procedure WMMOUSEWHEEL(var Msg: TMessage); message 
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