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

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

Timer vs ListBox [D7]


Страницы:   1 2 3 4

Наталья ©   (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 будет рывками.


Страницы:   1 2 3 4

Наверх

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