Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как заставить TScrollBox слушаться колеса ?


Автор: Gershkovich 15.8.2006, 12:10
Привет всем !

Сабж.

Мышиное колесо не прокручивает содержимое TScrollBox.
А хотелось бы...
Хотя бы тока вертикальный скроллинг.

Есть ли решение ?

Заранее спасибо.

Автор: dvamaster 15.8.2006, 12:15
Причин может много быть, выложи код, где идут каки-нидь обработки в TScrollBox или еще где. Могет где перехватываешь сообщения.

Автор: Gershkovich 15.8.2006, 12:24
Кода просто нету.

Я положил несколько панелей на TScrollBox и все .
Никакого кода не писал.


ЗЫ Забыл сказать - юзаю Delphi 6

Автор: Romikgy 15.8.2006, 12:55
MouseCapture какое значение имеет?

Автор: Snowy 15.8.2006, 12:56
Поищи поиском по WM_MOUSEWHEEL

Автор: Romikgy 15.8.2006, 12:57
А вообще проперти
 property OnMouseWheel;
    property OnMouseWheelDown;
    property OnMouseWheelUp;
есть а обработка
WM_MOUSEWHEEL
я не нашел smile

Добавлено @ 13:06 

вот что нашел 
Код

procedure CMMouseWheel(var Message: TCMMouseWheel); message CM_MOUSEWHEEL;

почему только CM_MOUSEWHEEL????

Автор: Snowy 15.8.2006, 13:27
Потому что Application посылает это сообщение, вместо WM_MOUSEWHEEL.
Чтобы не путать внутреннее сообщение и сообщение системы - оставляет возможность ловить родное WM_ вручную.
Но, раз есть родные события, то лучше юзать их.
Хотя не факт, что в более ранних версиях Delphi они есть...

Автор: Romikgy 15.8.2006, 13:40
нормально  smile 
Код

procedure WMMouseWheel(var Message: TWMMouseWheel); message WM_MOUSEWHEEL;

procedure TControl.WMMouseWheel(var Message: TWMMouseWheel);
begin
  if not Mouse.WheelPresent then
  begin
    Mouse.FWheelPresent := True;
    Mouse.SettingChanged(SPI_GETWHEELSCROLLLINES);
  end;
  TCMMouseWheel(Message).ShiftState := KeysToShiftState(Message.Keys);
  MouseWheelHandler(TMessage(Message));
  if Message.Result = 0 then inherited;
end;

procedure TControl.MouseWheelHandler(var Message: TMessage);
var
  Form: TCustomForm;
begin
  Form := GetParentForm(Self);
  if (Form <> nil) and (Form <> Self) then Form.MouseWheelHandler(TMessage(Message))
  else with TMessage(Message) do
    Result := Perform(CM_MOUSEWHEEL, WParam, LParam);
end;

на кой такие усложнения

Автор: Snowy 15.8.2006, 13:46
для универсальности

Автор: Romikgy 15.8.2006, 14:13
Snowy, если не секрет где здесь универсальность?

Автор: Snowy 15.8.2006, 14:14
То, что один код работает для любого компонента.
И для формы и для любого другого.

Автор: Gershkovich 15.8.2006, 14:20
Ничего не понял.

Получается что к моему скрол боксу надо дописать методы, которые привел 
Romikgy ?

Но тогда надо наследовать класс, переопределять методы. 
И потом его не положишь на форму в design time  (визуально, имею в виду)

А как это сделать с компонентом, который  лежит на форме ?
Вот так не выходит:
Код

ScrollBox.MouseWheelHandler:= MyMouseWheelHandler;

Автор: Romikgy 15.8.2006, 14:30
Цитата(Romikgy @  15.8.2006,  11:57 Найти цитируемый пост)
property OnMouseWheel;

имзо в это всавить код который будет обрабатывать колесо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)