Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.062 c
2-1270099947
gvozdkoff
2010-04-01 09:32
2010.08.27
сравнение 2-х строк, если они равны то вывод формы-сообщения


2-1268759104
Делфиец
2010-03-16 20:05
2010.08.27
Как отобразить миллесекунды в таблице БД


15-1274646586
Юрий
2010-05-24 00:29
2010.08.27
С днем рождения ! 24 мая 2010 понедельник


15-1272540136
atruhin
2010-04-29 15:22
2010.08.27
Простая библиотека чтения dbf


2-1272982597
novichek
2010-05-04 18:16
2010.08.27
TCPserver





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский