колесо прокрутки

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
maelz
Сообщения: 47
Зарегистрирован: 10 сен 2005, 18:45

Как с помощью колёсика мышки прокручивать форму вверх, вниз. :evil:
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Путём обрабатывания нотификации WM_MOUSEWHEEL.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
CyMKuH
Сообщения: 3
Зарегистрирован: 04 янв 2006, 12:55

maelz писал(а):Как с помощью колёсика мышки прокручивать форму вверх, вниз. :evil:
1) Надо поставить в свойствах формы KeyPreview:=true; - это если на форме имеются другие компоненты, и фокус нахадится на них...

2) Описать события:

procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
Form1.Top:=form1.Top-1; {Форма двигается вверх}
end;

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
Form1.Top:=form1.Top+1; {Форма двигается вниз}
end;
maelz
Сообщения: 47
Зарегистрирован: 10 сен 2005, 18:45

Я имею в виду не перемещение самой формы вверх вниз, а перемещение содержимого формы.
[/b]
CyMKuH
Сообщения: 3
Зарегистрирован: 04 янв 2006, 12:55

maelz писал(а):Я имею в виду не перемещение самой формы вверх вниз, а перемещение содержимого формы.
[/b]
Если ты хочешь, чтобы все без исключения компоненты перемещались по форме, то тогда тебе надо в этих же обработчиках событий написать:

procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
компонент1.Top:=компонент1.Top-1; {компонент1 двигается вверх}
компонент2.Top:=компонент2.Top-1; {компонент2 двигается вверх}
end;

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
компонент2.Top:=компонент2.Top+1; {компонент2 двигается вниз}
компонент1.Top:=компонент1.Top+1; {компонент1 двигается вниз}
end;


Компонент1 и Компонент2 могут быть например Button1 и Panel1
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Нет, нет. Так не надо делать!

Надо у формы AutoScroll поставить в False.
Затем в VertScrollBar.Range поставить логическую (прокручиваемую) высоту формы.
(VertScrollBar.Tracking можно = true)

Все. Этого достаточно. Содержимое формы будет прокручиваться.

Теперь осталось только связать колесико с вертикальным скроллбаром формы:

т.е. не
Form1.Top:=form1.Top-1; {Форма двигается вверх}

(как было выше)

а

Form1.VertScrollBar.Position:=form1.VertScrollBar.Position-1; {Форма двигается вверх}
Ответить