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

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

обработка сообщений в консольном приложении


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;


Наверх

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