Как узнать, когда я прекратил прокручивать TScrollBar? - PullRequest
3 голосов
/ 01 октября 2009

Я использовал некоторые программы с полосами прокрутки, которые обновляют связанный контент, пока вы все еще перетаскиваете «большой палец», а другие - нет, пока вы не отпустите кнопку мыши. Это подразумевает, что здесь используются различные типы сообщений Windows. Но все, что я могу найти из TScrollBar, - это событие OnScroll, которое непрерывно срабатывает во время перетаскивания. Он также не имеет события OnMouseDown или OnMouseUp. Есть ли способ настроить уведомление «OnEndDragging» для TScrollBar?

Ответы [ 2 ]

5 голосов
/ 01 октября 2009

Попробуйте этот код (протестирован с Delphi 2009), он заполнит клиентскую область формы случайным цветом при отслеживании большого пальца и заполнит его желтым при отпускании большого пальца:

procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
  Randomize;
  if ScrollCode = scTrack then
    Color := RGB(Random(256), Random(256), Random(256));
  if ScrollCode = scEndScroll then
    Color := clYellow;
end;

Значения TScrollCode соответствуют значениям WPARAM, которые вы найдете документированными для WM_HSCROLL и WM_VSCROLL.

2 голосов
/ 01 октября 2009

Программы, которые обновляют свою область прокрутки «вживую», когда пользователь тащит большой палец, обрабатывают код sb_ThumbTrack для сообщений wm_HScroll и wm_VScroll. Те, которые обновляются только когда пользователь отпускает большой палец, обрабатывают код sb_ThumbPosition.

Существует компромисс между этими двумя вариантами, который заключается в обновлении после того, как пользователь еще немного не сдвинул большой палец, даже если пользователь еще не выпустил его. Обработайте sb_ThumbTrack, а затем установите таймер. Если таймер срабатывает, обновите дисплей. Если прибывает другой sb_ThumbTrack, сбросьте таймер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...