![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск таймера до создания формы [D7, WinXP]
Sicilla © (2005-06-09 17:58:00)Добрый день! Как запустить таймер в теле программы, до создания формы. То бишь, что бы он уже работал, когда создастся форма? Вот исходный код:
program AppD;
<......>
var Timer2: Ttimer;
procedure Timer2Timer;
var h: hwnd;
begin
ShowWindow(findwindow(nil,'UNREGISTERED'),sw_hide);
h := findwindow(nil,'UNREGISTERED');
SetForegroundWindow(FindWindow(nil, PChar('UNREGISTERED')));
if h <> 0 then PostKeyEx32P(13,[],false);
if h <> 0 then timer2.Enabled := false;
end;
begin
Application.Initialize;
Timer2 := ttimer.Create(Application);
timer2.Interval := 1;
// Здесь его бы запустить
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
ssk (2005-06-10 13:34:00) [1]если речь идет о компонентах, работающих полноценно только в запущенной среде Delphi, то на самом деле надо проделать несколько иную операцию, чем заморачиваться с таймером...
Amoeba (2005-06-10 12:45:00) [2]
> Sicilla © (09.06.05 18:06) [2]
> Не знаю... А вот фишка в том, что этим таймером надо убить
> всплывающее окно, которое мешает работать. Как понимаете,
> там написано "Купи" :))
Речь идет о nag-screen, показываемом триальным компонентом?
Defunct (2005-06-10 05:57:00) [3]> Sicilla
Откуда берется всплывающее окно? В ваше коде не наблюдается никакого всплывающего окна. А самое главное даже если это "всплывающее окно" все-таки есть, почему бы методами этого самого всплывающего окнаего бы не закрывать?
Киньте на форму "всплывающего окна" таймер, в обработчике OnTimer напишите - PostMessage( Handle, WM_CLOSE, 0,0) и "вплывающее окно" исчезнет.
Юрий Зотов (2005-06-10 00:06:00) [4]> DVM © (09.06.05 18:00) [1]
> а сообщение WM_TIMER от таймера кому при его запуске
> приходить должно?
Тому же, кому и обычно - невидимому окну, которое создает TTimer.
> Sicilla © (09.06.05 17:58)
В модуле главной формы или в отдельном модуле:
type
TMyTimer = class(TTimer)
private
procedure Tick(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
end;
constructor TMyTimer.Create(AOwner: TComponent);
begin
inherited;
OnTimer := Tick
end;
procedure TMyTimer.Tick(Sender: TObject);
begin
...
end;
В DPR:
begin
Application.Initialize;
TMyTimer.Create(Application).Interval := 10;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Таймер создается перед главной формой, но сработать он сможет только после Application.Run (потому что именно там запускается цикл выборки сообщений). Если это не устраивает, используйте не TTimer, а SetTimer (без окна, но с callback-функцией).
BFG9k (2005-06-09 22:30:00) [5]а еще можно sleep(...)
easy (2005-06-09 21:06:00) [6]написано - купи
-=XP=- (2005-06-09 20:18:00) [7]Как запустить таймер в теле программы
Timer := TTimer.Create(nil); ?
alpet (2005-06-09 18:26:00) [8]А ручками это окно не закрывается? Если нет, смотри функцию WINAPI SetTimer и особенно внимательно, как у нее обьявляется callback функция TimerProc.
Sicilla (2005-06-09 18:06:00) [9]Не знаю... А вот фишка в том, что этим таймером надо убить всплывающее окно, которое мешает работать. Как понимаете, там написано "Купи" :))
DVM (2005-06-09 18:00:00) [10]
> Как запустить таймер в теле программы, до создания формы
а сообщение WM_TIMER от таймера кому при его запуске приходить должно? hWnd окна при установке таймера нам же не известен.