![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Timer vs ListBox [D7]
Наталья © (2013-01-21 11:06:00)Здравствуйте. При прокрутке ListBox колесом мыши (именно при прокрутке колесом) Работа таймера в программе приостанавливается. Как можно обойти этот не желательный эффект?
aka (2013-01-23 13:34:00) [1]
> aka (23.01.13 12:53) [67]
>
> Ну а если таймер в отдельном потоке запустить или так не
> получится?
Нет - не работает. Попробовал создать таймер в отдельном потоке, а эффект остался прежний.
brother (2013-01-23 13:06:00) [2]ты не читатель? уже более худшие варианты испробовали...
aka (2013-01-23 12:53:00) [3]Ну а если таймер в отдельном потоке запустить или так не получится?
brother (2013-01-22 20:13:00) [4]w7x64 d7 проблемма остается...
NoUser (2013-01-22 19:45:00) [5]
> brother © (22.01.13 06:17) [49]
> [48] не получится так...
Спецом проверил (даж гадкую прокрутку включил) - проблема была, после такого "решения" - не проявлялась.
W7, XE2.
QAZ10 (2013-01-22 17:46:00) [6]
> aka (22.01.13 14:34) [63]
все проще на самом деле, под списком (в руском переводе) в винде подразумеваются 2 элемента - листбокс и комбобокс
и опция плавности их прокрутки это чисто мультик, когда создается битмап и попиксельно сдвигается
aka (2013-01-22 14:34:00) [7]Дело в том, что ListView или другие аналогичные компоненты, которые не вещают вывод все используют
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
А вот как крутит скролл ListBox нужно смотреть, но точно не так.
O'ShinW (2013-01-22 13:29:00) [8]
> словил ситуацию включением
> у всех по умолчанию включено
да понял-понял
написал почему не воспроизвелось тогда
QAZ10 (2013-01-22 12:57:00) [9]
> O'ShinW © (22.01.13 12:39) [59]
дело не в том, что у тебя выключено, а в том, что у всех по умолчанию включено
sniknik (2013-01-22 12:46:00) [10]> все в 0 / выключено.
> ответ тут (словил ситуацию включением, события "кончились")
O'ShinW (2013-01-22 12:39:00) [11]блин, ну нет у меня такой проблемы :)
не воспроизводится.
w7, оформление классика, спецэффекты / аеро ( / гидро / космо:) ) - все в 0 / выключено.
brother (2013-01-22 11:11:00) [12]все, я умываю руки, Натальи удачи и прислушайтесь к [9]
brother (2013-01-22 11:07:00) [13][55] проверил - висит...
brother (2013-01-22 10:53:00) [14][54] ща проверил, так и получается - висит...
clickmaker (2013-01-22 10:50:00) [15]поток + SendMessage + RedrawWindow(PaintBox.Handle,nil,0,RDW_INVALIDATE or RDW_UPDATENOW)
brother (2013-01-22 10:39:00) [16]> + таймер можно заменить на поток.
можно конечно, но имхо, при синхронизации с основным потоком приложения (для рефреша например лэйблов), будем также висеть тк, имхо, основной поток в этот момент жестко висит...
sniknik (2013-01-22 10:33:00) [17]хотя нет, все не то (все что выше написал фигня)
ответ тут (словил ситуацию включением, события "кончились")
QAZ10 (21.01.13 11:58) [9]
+ таймер можно заменить на поток.
sniknik (2013-01-22 10:22:00) [18]и кстати проверь, если еще не проверил, вот такой глупый вариант -
type
TListBox = class(StdCtrls.TListBox)
protected
procedure WMMouseWheel(var Msg: TWMMouseWheel); message WM_MOUSEWHEEL;
end;
TForm1 = class(TForm)
....
....
procedure TListBox.WMMouseWheel(var Msg: TWMMouseWheel);
begin
inherited;
Application.ProcessMessages;
end;
sniknik (2013-01-22 10:13:00) [19]+
может еще от операционки зависит... все таки события из нее - XP, без схем(классика).
sniknik (2013-01-22 10:12:00) [20]> проблемму подтверждаю, но мне кажется пока идет такой скролл вешается все окно...
сравните с автором установленные в дельфю доп.компоненты... у меня пример (Наталья (21.01.13 14:49) [19]) ничего не вешает. дельфя (D7) "чистая".