Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Плавная промотка   Найти похожие ветки 

 
SIV5000   (2010-06-04 16:51) [0]

Народ привет. Подскажите как сделать в компоненте плавную прокрутку такую уак в опере. Тоесть при прокурутке колеса скроллбар должен постепенно увеличивать скорость промотки пока не достигнеться конечная точка. Ниже я привел код, который я использую, но проблема в следующем: если быстро прокручивать колесо мыши по много раз вверх-вниз то скролбар не сразу реагирует на команду, а продолжает выполнять все по порядку. Например, крутим вниз 10 раз потом сразу крутим один раз вверх но прога продолжает крутить вниз пока не прокрутит все 10 раз а потом уже будет крутить вверх, хотя должна остановить предыдущую процедуру.

.....
var
sbVert:TScrollBar;
.....  WMMouseWheel(var Msg: TWMMouseWheel);
var
 newPos: integer;
begin
 if Msg.WheelDelta < 0 then begin
 if (sbVert.Position = sbVert.Max) then Exit;
  for newPos := 10 to 15 do begin
  sbVert.Position:= sbVert.Position + 2*newPos;
  invalidate;
application.ProcessMessages;
 end; end else
 if Msg.WheelDelta > 0 then begin
 if (sbVert.Position = 0) then Exit;
  for newPos := 10 to 15 do begin
  sbVert.Position:= sbVert.Position - 2*newPos;
  invalidate;
application.ProcessMessages;
 end;
   Msg.Result:= 1;


 
KilkennyCat ©   (2010-06-04 17:15) [1]

V - Скорость.
если V/abs(V) равно  WheelDelta/abs(WheelDelta) значит движемся в ту же сторону и V := V + WheelDelta; иначе движемся не в ту сторону, V := WheelDelta;
sbVert.Position:= sbVert.Position + V;


 
KilkennyCat ©   (2010-06-04 17:17) [2]

не, не плавно. Но смысл верный - изменение вращения сбрасывает и меняет счетчик.


 
SIV5000   (2010-06-05 21:20) [3]

Спасибо, попробовал, работает, но как сделать плавную прокрутку? Мой вариант может не супер, но делает плавную промотку, вот только как решить проблему которую я выше описал?!!!!


 
Демо ©   (2010-06-05 21:38) [4]

Как вариант вижу такое решение - При обработке  WMMouseWheel не выполняем обработку сразу же, а накапливаем события например в динамическом массиве.
Включаем для обработки таймер, в обработчике таймера проверяем первый и последний элемент. Если направление отличается, удаляем все первые элементы и меняем направление прокрутки.
Если же направление не поменялось, то обрабатываем первый элемент - прокручиваем, затем удаляем обработанный элемент.


 
Sha ©   (2010-06-05 21:52) [5]

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


 
RWolf ©   (2010-06-05 22:11) [6]


> SIV5000   (05.06.10 21:20) [3]
> Спасибо, попробовал, работает, но как сделать плавную прокрутку?
>  Мой вариант может не супер, но делает плавную промотку,
>  вот только как решить проблему которую я выше описал?!!

Имхо, для получения именно плавной прокрутки нужно смотреть в сторону ScrollWindow.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.081 c
11-1221313480
DJ Vusal
2008-09-13 17:44
2010.08.27
Проблема OLE обращений из Delphi в Excel


2-1272383481
Lyonux
2010-04-27 19:51
2010.08.27
Шифрация текста по таблице Виженера.


15-1266622204
Юрий
2010-02-20 02:30
2010.08.27
С днем рождения ! 20 февраля 2010 суббота


2-1269543236
Первокурсница
2010-03-25 21:53
2010.08.27
Delphi 7: строки, обратный порядок слов


2-1273563415
Uzer2010l
2010-05-11 11:36
2010.08.27
Коллизия обработчиков