динамічне створення таймера перед запускм додатки
У файлі .dpr не виходить
(Видається помилка компіляції)
створити TTimer
Як зробити правильно?
uses
# XA0; Forms,
# XA0; Windows,
# XA0; extctrls,
# XA0; Classes,
# XA0; unit55 in "D: \ Program Files \ Borland \ Delphi5 \ Bin \ unit55.pas";
procedure # XA0; # XA0; on_Timer (Sender: TObject);
begin
# XA0; # XA0; # XA0; // код обробника
# XA0; # XA0; # XA0; fl: = false;
end;
var
h: HWND;
tm: TTimer;
fl: boolean;
begin
# XA0; Application.Initialize;
# XA0; fl: = true;
# XA0; tm: = TTimer.Create (Application);
# XA0; tm.Interval: = 100;
# XA0; tm.OnTimer: = on_Timer; //<== [Error] Project1.dpr(24):
# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; // Incompatible types:
# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; // method pointer and regular procedure
# XA0; tm.Enabled: = true;
# XA0; Application.Initialize;
# XA0; Application.CreateForm (TForm1, Form1);
# XA0; while (fl) do application.ProcessMessages;
# XA0; tm.free;
# XA0; Application.Run;
end.
1 Навіщо тобі Application.Initialize два рази
2 TTimer можна створювати і без Application
3 OnTimer должент бути (як ти мабуть прочитав і перейнявся) методом об'кта, а не регулярною процедурою
4 І в кінці кінців вся та белебердень яку ти написав зводиться до
Обробником події об'єкта повинен бути метод об'єкта, а не просто процедура.
Взагалі кажучи, з коду незрозуміло, чому б просто не покласти таймер на головну форму і отримати те ж саме без всяких проблем. Але якщо вже дуже хочеться, то напишіть свій нащадок TTimer, додайте йому обробник OnTimer і нехай обробляє сам себе.
ЗИ:
1 unit55 - :) жах
2 а всетаки навіщо тобі h: HWND
3 Application.ProcessMessages до Application.Run це класна ідея!
Можна запустити замість таймера невеликий додаток,
але не хотілося б
Суть наступна: після Application.CreateForm (TForm1, Form1);
до появи форми, на екран лізе вікно, яке
в обробнику таймера має бути вбито.
Хм. Може простіше і не створювати його?
h: HWND - звичайно потрібно прибрати в процедуру
> Application.ProcessMessages до Application.Run це класна
> Ідея!
береженого Бог береже, як говорила монашка.
> Після Application.CreateForm (TForm1, Form1);
> До появи форми, на екран лізе вікно, яке
> В обробнику таймера має бути вбито.
Яке вікно? Звідки воно взялося? Навіщо його вбивати? І чому обов'язково за таймером?
> В unite вище наведене створення таймера проходить
> Нормально, а як бути тут?
Винести свій таймер в юніт. Можна в той же, де Form1.
P.S.
До виклику Application.Run таймер все одно не спрацює.
# XA0; Так, все геніальне простою Ващаєв правда.
Залишається тільки зовнішню програму.
да нах тобі таймер? засунь FindWindow в while? туди ж sleep і ProcessMessages - тобто прога буде чекати поки не з'явиться вікно, а там і вбивай себе.
Пам'ять: 0.75 MB
Час: 0.089 c