Обработка на събития в приложение без формуляр

Подобна тема вече е засегната->
http://www.delphimaster.net/view/1-1076510033/
Обърнах специално внимание на [16] [17], но нищо не се случи:(
Може да доведе парче работещ код за приложение без формуляр: трябва да обработвате съобщения от таймер, т.е. как да създадете процедура Timer1.Timer и в процедура например showmessage (".").
Благодаря.

вижте SetTimer, TimerProc на MSDN

> как да създадете процедура Timer1.Timer

Създайте потомък на TTimer точно в програмата и го оставете да се справи със собственото си събитие.

Тип
TMyTimer = клас (TTimer);
публично
конструктор Създаване (AOwner: TComponent); заместване;
процедура Tick (Изпращач: TObject);
край;

конструктор TMyTimer.Create (AOwner: TComponent);
започнете
наследен;
OnTimer: = Отметнете
край;

процедура TMyTimer.Tick (Изпращач: TObject);
започнете
.
край;

Съответно, в програма без Приложение ще трябва да внедрите свой собствен механизъм за извличане и обработка на съобщения.

Като цяло не питате за събития, а за съобщения и събитията не са обвързани с прозорци и ще работят.
В примера за SW това е OnTimer: = Tick

Въпросът, разбира се, е куц, но как да създадете приложение без формуляр? Когато стартира Delphi, по подразбиране се избира New-Application, където има формуляр, и Project-> Remove from Project-> въпросът е да премахнете самия модул Unit1.pas - тогава всички прозорци са затворени - и когато изберете Project-> View Source, се появява прозорец на модула, където Forms присъства в Uses, след започване на Application.Initialize и Application.Run, но след всичко, просто нямам нужда от това!
Благодаря.

> независим (19.02.04 14:03) [4]

Клавиатурата има бутони "del" и "backspace".

> където Forms присъства в Uses, след start
> Application.Initialize and Application.Run,
> но точно това не ми трябва!

И кой ви пречи да премахнете всички ненужни ръце? Минималната работеща програма Delphi се състои само от начало и край.

2 Юрий Зотов-а Сигурни ли сте, че линията
TMyTimer = клас (TTimer)
необходима запетая?
Ако запетаята не е предоставена, по време на компилацията се генерира единствената грешка - в реда
конструктор Създаване (AOwner: TComponent); заместване;
Недеклариран идентификатор: TComponent
и съответно

започнете
timer1: = TMyTimer.Create (); в този ред
таймер 1. Интервал: = 1000;
край.
Не са достатъчни действителните параметри.

Със запетая има около 10 грешки:(

> независим (19.02.04 18:21) [7]

Разбира се, точката с запетая трябва да бъде премахната. Наистина ли не е ясно, че това е обикновен приплъзване на езика?

И разбира се, трябва да добавите класове към употребите. Изисква ли обяснения дори и най-елементарната азбука? Как ще напишете това:

„Съответно в програма без Приложение ще трябва да внедрите собствен механизъм за извличане и обработка на съобщения.“.

Ето как точно да го приложите.
Следващият код виси Delphi почти веднага.

използва
SysUtils,
Windows,
Класове,
Диалогови прозорци,
StdCtrls, ExtCtrls, QStdCtrls, QExtCtrls,
ScktComp;

тип TMyTimer = клас (TTimer)
публично
конструктор Създаване (AOwner: TComponent); замяна;
процедура Tick (подател: TObject);
край;

конструктор TMyTimer.Create (AOwner: TComponent);
започнете
наследен;
OnTimer: = Tick;
край;

процедура TMyTimer.Tick (Изпращач: TObject);
започнете
showmessage ("on Tick");
край;


вар
timer1: TMyTimer;
започнете
timer1: = TMyTimer.Create (нула);
timer1.Enabled: = true;
таймер 1. Интервал: = 1000;

край.
Можете ли да ми кажете статията, иначе няма да разбера по никакъв начин:(

Въпреки това ще съм много благодарен, ако ми кажат как да прилагам собствения си механизъм за извличане и обработка на съобщения в програма без приложение.
Благодаря.


> независим (02.22.04 15:47) [10]
хммм . Накратко, нека се договорим за заданието и ще им напиша както цикъла за извличане на съобщения, така и много прекрасни неща;-))

Наистина не очаквах:)
Прегледах търсенето на много информация за RTFM, но има нещо, свързано с Delphi:(
Ще бъда много благодарен, ако публикувате линк към добра статия или поне малко рамкиране на код, който може да се използва за писане на подобна. Но в „Ще напиша цикъл за извличане на съобщение“ става въпрос за прихващане на съобщения с функциите на Windows API? Тези. трябва ли да сложа кука? Или нещо като GetMessage?

> независим (23.02.04 15:08) [12]

Типичен цикъл за извличане на съобщения изглежда така:

докато GetMessage (Msg, 0, 0, 0) прави
започнете
TranslateMessage (Msg);
DispatchMessage (Msg)
край;

Тя работи, докато пристигне съобщението WM_QUIT. Обикновено PostThreadMessage се използва за изпращането му на опашката.

И можете да попитате защо искате да създадете приложение без формуляри?

1. Искате ли да създадете минимално приложение?
2. Просто искате да скриете основната форма на приложението?

Ако вторият, тогава има такъв отговор:
Добавете реда към DPR файла:

Application.ShowMainFowm: = False;
Приложение

PS: Подготвих този отговор вчера, но имаше проблеми със сървъра, бих могъл да го публикувам вчера.

Защо всички останаха срещу обработката на съобщения без формуляр? какво си струва да се направи невидим прост прозорец на API и да се направи чрез него? Ако SetTimer иска HWND, дайте му HWND:)

> Ромкин (24.02.04 18:13) [15]

Точно така работи TTimer. Ето защо е необходим цикъл за извличане на съобщения.

Съдейки по системата, CreateWaitableTimer може да е подходящ, той няма прозорци и не изисква цикъл на извличане.

Мисля, че може би просто

функция CallbackWndProc (прозорец: HWND; съобщение: кардинал;