Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скроллер [D7, Win95/98]


REA ©   (2003-01-30 14:23:00) 

У моего компонента есть скроллер и когда за него тянешь он движется рывками (ну так слегка), поскольку отрисовка съедает время. Нельзя ли придумать механизм, который бы пропускал часть действий при быстром движении мыши и рисовал все при остановке? Никто подобного не делал? Наверно можно таймер прицепить или еще что-то попроще.


REA   (2003-01-30 16:49:00) [1]

Понятно. Я думал может есть более легальный способ. Спасибо.


Максимилиано   (2003-01-30 15:48:00) [2]

Можно попробовать на событие MouseMove (а может и на событие от скроллера) вешать запуск таймера. Этот вариант я использовал для вывода сообщений в статусбар.
Работает.

код примерно такой:

обработчик MouseMove
ScrollTimer.Enable := true;

обработчик Таймера
рисуем
ScrollTimer.Enable := false;


REA   (2003-01-30 15:18:00) [3]

Нет там MouseMove - есть сообщения от скроллера. И поступают они не так как WM_MouseMove. А что если в приведенном коде (GetTickCount - t > 500) не наступит? Надо тогда еще последнее событие отслеживать. И при остановке сообщения не поступают. Вобщем другой нужен алгоритм.


Cancel   (2003-01-30 14:50:00) [4]

var
t: Integer

При событии WM_MouseMove
- запоминать в переменной t:= GetTickCount;
При событии WM_MouseLast и при инициализации;
- t:= 0;
При прорисовке -
if (GetTickCount - t > 500) then
begin
Рисовать;
end;

По моему что-то такое должно быть


Наверх

Титульная страница Поиск, карта сайта Написать письмо