![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
обработка сообщений в консольном приложении
Bless © (2003-12-25 15:19:00)
Как обрабатывать события в консольном приложении?
Есть ли для консольного приложения очередь сообщений и
цикл их обработки?
Киньте, плз, примерчик на обработку какого-то события
(например, нажатие клавиши) или еще лучше, ссылку на литературу
в инете, где освещается этот вопрос.
Объяснения от первого лица тоже сгодятся.
Спасибо.
Bless (2003-12-25 17:16:00) [1]
Спасибо, в голове просветлело. :)
Polevi (2003-12-25 16:42:00) [2]
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
procedure TimerProc(hwnd:THandle; uMsg:Cardinal; idEvent:Cardinal; dwTime:DWORD);stdcall
begin
writeln("tick");
end;
var
msg:TMsg;
begin
SetTimer(0,0,1000,@TimerProc);
while GetMessage(msg,0,0,0) do
DispatchMessage(msg);
end.
Polevi (2003-12-25 16:35:00) [3]
nikkie © (25.12.03 16:33) [3]
не совсем так, см SetTimer
nikkie (2003-12-25 16:34:00) [4]
TranslateMessage и DispatchMessage необходимы только если есть окна.
nikkie (2003-12-25 16:33:00) [5]
нет абсолютно никакой разницы между консольным и не консольным приложением кроме того, что для у консольного приложения есть консоль. :)
вставь {$APPTYPE CONSOLE} в любое VCL-приложение - получишь консольное.
по поводу очереди сообщений - не консольное приложение точно так же не имеет никаких очередей сообщений изначально. очередь сообщений потока создается при первом обращении из этого потока к ui-функциям.
обработку собщений делают с помощью функции GetMessage:
var
m: MSG;
begin
while GetMessage(m, 0, 0, 0) do begin
...
end;
end;
Polevi (2003-12-25 16:27:00) [6]
PS
так ты будешь выбирать сообщения из очереди потока, нажатие на кливиши не придет, нет окна
Polevi (2003-12-25 16:22:00) [7]
uses Windows;
var
msg:TMsg;
begin
while GetMessage(msg,0,0,0) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;