![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Timer vs ListBox [D7]
Наталья © (2013-01-21 11:06:00)Здравствуйте. При прокрутке ListBox колесом мыши (именно при прокрутке колесом) Работа таймера в программе приостанавливается. Как можно обойти этот не желательный эффект?
brother (2013-01-21 15:31:00) [41]я использовал другой подход к "подвешиванию" окна: нажимаем на колесико и ведем мышь ввех-вниз до любого скролла...
Наталья (2013-01-21 15:29:00) [42]Даже такая авантюра не спасает
while True do
Application.ProcessMessages;
Sha (2013-01-21 15:29:00) [43]> Наталья (21.01.13 15:26) [25]
> Результат конечный тот же.
Результатом работы программы является мерцание таймера 10 раз в секунду или нечто другое?
Просто любопытно.
brother (2013-01-21 15:28:00) [44]посмотрел через spy++ на момент "такого" прокручивания окно перестает получать сообщения... значит просто проблемму не решить, или вообще не решаема...
Наталья (2013-01-21 15:26:00) [45]
> Sha © (21.01.13 15:12) [24]
>
> Не совсем то же самое.
> В моем варианте в течение "повешенного" интервала просто
> нет вывода, но время течет непрерывно.
> В вашем варианте время останавливается на время зависания.
>
Результат конечный тот же.
Sha (2013-01-21 15:12:00) [46]Не совсем то же самое.
В моем варианте в течение "повешенного" интервала просто нет вывода, но время течет непрерывно.
В вашем варианте время останавливается на время зависания.
brother (2013-01-21 15:10:00) [47]проблемму подтверждаю, но мне кажется пока идет такой скролл вешается все окно...
Наталья (2013-01-21 15:09:00) [48]
> Sha © (21.01.13 14:54) [20]
Тоже самое - скроллинг колесом вешает вывод.
Sha (2013-01-21 14:56:00) [49]и Timer1.Interval := 50;
Sha (2013-01-21 14:54:00) [50]> Наталья (21.01.13 14:49) [19]
Попробуйте в FormCreate: StartTickCount:=GetTickCount;
в Timer1Timer: Caption := (GetTickCount-StartTickCount) div 100;
Наталья (2013-01-21 14:49:00) [51]
> brother © (21.01.13 14:39) [14]
Весь модуль и покрутите колесом.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i: Integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 100;
i := 0;
//заполним ListBox1 через инспектор
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(i);
Caption := IntToStr(i);
end;
end.
brother (2013-01-21 14:43:00) [52]> Неправильно i показывать.
хрен с ним как, главное: кто очередь сообщений вешает...
brother (2013-01-21 14:43:00) [53]> нет не плавный
будем спорить?
Sha (2013-01-21 14:42:00) [54]
> Наталья (21.01.13 13:44) [10]
> когда мы будем крутить колесо мыши в листбокс, то работа таймера
> будет приостанавливаться. Вывод переменной I будет рывками.
Неправильно i показывать.
Правильно показывать f(GetTickCount), например, (GetTickCount-StartTickCount) div 1000
Наталья (2013-01-21 14:42:00) [55]
> вывод плавный, хоть обкрутись
нет не плавный, попробуйте колесом (если есть)
brother (2013-01-21 14:39:00) [56]и не вижу ответа на [7]...
brother (2013-01-21 14:37:00) [57][10] вот чувствую, что дело не в тех кусках кода, что Вы показываете!
O'ShinW (2013-01-21 14:09:00) [58]
> проблема не воспроизводится
win7, d7
вывод плавный, хоть обкрутись
timer interval = 100
строк в листбокс 10
O'ShinW (2013-01-21 13:53:00) [59]
> procedure TForm1.Timer1Timer(Sender: TObject);
> begin
> i := i + 1;
> Form1.Caption := IntToStr(i);
> end;
>
проблема не воспроизводится
Наталья (2013-01-21 13:44:00) [60]
> brother © (21.01.13 11:51) [8]
да не в том дело, все это получается - примеров полно.
Вопрос вот в чем:
есть таймер и листбокс
procedure TForm1.Timer1Timer(Sender: TObject);
begin
i := i + 1;
Form1.Caption := IntToStr(i);
end;
когда мы будем крутить колесо мыши в листбокс, то работа таймера будет приостанавливаться. Вывод переменной I будет рывками.