Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2021, 17:21   #11
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 144
По умолчанию

Не получается сделать прокрутку колесиком мыши компонента PaintBox при помощи компонента ScrollBox, в том случае когда размер PainBox больше, чем размер клиентской части формы. Для этого использовал следующий код:
Код:
procedure TForm1.scrlbx1MouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  scrlbx1.VertScrollBar.Position := scrlbx1.VertScrollBar.Position + 4;
end;

procedure TForm1.scrlbx1MouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  scrlbx1.VertScrollBar.Position := scrlbx1.VertScrollBar.Position - 4;
end;
Почему может не работать?
ichi вне форума Ответить с цитированием
Старый 06.10.2021, 18:05   #12
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 144
По умолчанию

Событие прокрутки колеса мыши вообще не отрабатывает. Очень странно. Добавил в процедуру события прокрутки колеса функцию ShowMessage. Сообщение ShowMessage не появляется. Есть идеи почему?
Код:
procedure TForm1.scrlbx1MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
 ShowMessage('OnMouseWheel');
  Handled := true;
  if (WheelDelta > 0) then
    WheelDelta := 10
  else
  if (WheelDelta < 0) then
    WheelDelta := -10
  else
    Exit;
  if (ssShift in Shift) then
    scrlbx1.HorzScrollBar.Position := scrlbx1.HorzScrollBar.Position - WheelDelta
  else
    scrlbx1.VertScrollBar.Position := scrlbx1.VertScrollBar.Position - WheelDelta;
end;
ichi вне форума Ответить с цитированием
Старый 07.10.2021, 02:06   #13
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Не знаю, почему событие не доходит до скроллбокса, если добавить обработчик у формы, то прокручивается:
Код:
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  if ssShift in Shift then
  begin
    if WheelDelta < 0 then
      SendMessage(scrlbx1.Handle, WM_HSCROLL, SB_LINERIGHT, 0)
    else
      SendMessage(scrlbx1.Handle, WM_HSCROLL, SB_LINELEFT, 0)
  end else
  begin
    if WheelDelta < 0 then
      SendMessage(scrlbx1.Handle, WM_VSCROLL, SB_LINEDOWN, 0)
    else
      SendMessage(scrlbx1.Handle, WM_VSCROLL, SB_LINEUP, 0)
  end;
  Handled := True;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 07.10.2021, 15:33   #14
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 144
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Не знаю, почему событие не доходит до скроллбокса, если добавить обработчик у формы, то прокручивается:

Код:
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  if ssShift in Shift then
  begin
    if WheelDelta < 0 then
      SendMessage(scrlbx1.Handle, WM_HSCROLL, SB_LINERIGHT, 0)
    else
      SendMessage(scrlbx1.Handle, WM_HSCROLL, SB_LINELEFT, 0)
  end else
  begin
    if WheelDelta < 0 then
      SendMessage(scrlbx1.Handle, WM_VSCROLL, SB_LINEDOWN, 0)
    else
      SendMessage(scrlbx1.Handle, WM_VSCROLL, SB_LINEUP, 0)
  end;
  Handled := True;
end;
Ваш пример работает. Обработчик колесика мыши у формы отрабатывает, прокрутки вертикальная и горизонтальная работают. Спасибо за помощь.
ichi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбираем программу по частям! Hac Свободное общение 2 20.10.2018 23:44
Разбираем программу . Kirill01 Софт 2 17.08.2013 21:21
Составляющие COM кабеля. ImmortalAlexSan Компьютерное железо 2 16.08.2010 18:50
Составляющие строки V@mpir Общие вопросы Delphi 12 06.10.2009 00:48