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

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

Запуск таймера до создания формы [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 окна при установке таймера нам же не известен.


Наверх

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