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

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

Как правильно работать с Timer? [Delphi, Windows]


Volterman ©   (2007-07-18 10:59:00) 

Хотелось бы увидеть полный пример работы с таймером. В качестве примера приведу свою ситуацию.
Есть главное окно и цикл обработки сообщений.

while (msg.message <> WM_QUIT) do
  begin
     if PeekMessage(msg, 0, 0, 0, PM_REMOVE) then
     begin
       TranslateMessage(msg);
       DispatchMessage(msg);
     end;
     <Команды выполняющиеся постоянно>
  end;

Надо с помощью таймера иммитировать многозадачность приложения (например что-то должно выполнятся каждую 1 сек, а что-то каждые 10 сек).
Чесно говоря я что-то не до конца понимаю как в KOL работать с таймером, обработку события OnTimer.
Инициализирую таймеры таким способом:

Timer1:=NewTimer(1000);
Timer1.Enabled:=True;
Timer2:=NewTimer(10000);
Timer2.Enabled:=True;


Дмитрий К   (2007-07-18 11:40:00) [1]

Не знаю как в вашем случае, а у меня работает:

program tstTimer;

uses
 KOL;

type
 PForm1 = ^TForm1;
 TForm1 = object(TObj)
   form, lb: PControl;
   Timer1, Timer2 : PTimer;
   procedure DoTimer(Sender: PObj);
 end;

var Form1: PForm1;
procedure NewForm1(var Result: PForm1; AParent: PControl);
begin
 New(Result, Create);
 with Result^ do
 begin
   form := NewForm(AParent, 'Test Timer');
   Applet := form;
   lb :=NewListBox(form, []).SetAlign(caClient);
   Timer1 := NewTimer(1000);
   Timer1.OnTimer := DoTimer;
   Timer2 := NewTimer(10000);
   Timer2.OnTimer := DoTimer;
   form.Add2AutoFree(Timer1);
   form.Add2AutoFree(Timer2);
 end;
end;

{ TForm1 }

procedure TForm1.DoTimer(Sender: PObj);
begin
 lb.Add(int2str(Integer(Sender)));
end;

begin
 NewForm1(Form1, nil);
 Form1.Timer1.Enabled := True;
 Form1.Timer2.Enabled := True;

 Run(Applet);

end.


Наверх

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