Содержание материала

 

Мы даже можем сделать "цикл обработки сообщений" (message loop) - для тех, кто только начинает программировать в Delphi - цикл обработки сообщений необходимо делать, если приложение создаётся в чистом API - при этом необходимы как минимум три составляющие: WinMain, message loop и window proc.

 

Ниже приведён код "цикла обработки сообщений":

Code:

 

SetConsoleCtrlHandler(@ConProc, False);

Cls;

//

// "Цикл обработки сообщений"

//

Continue := True;

while Continue do

begin

ReadConsoleInput(GetConInputHandle, IBuff, 1, IEvent);

case IBuff.EventType of

   KEY_EVENT :

     begin

       // Проверяем клавишу ESC и завершаем программу

       if ((IBuff.KeyEvent.bKeyDown = True) and

       (IBuff.KeyEvent.wVirtualKeyCode = VK_ESCAPE)) then

         Continue := False;

     end;

   _MOUSE_EVENT :

     begin

       with IBuff.MouseEvent.dwMousePosition do

         StatusLine(Format('%d, %d', [X, Y]));

     end;

end;

end {While}

 Так же можно добавить "обработчик событий" и перехватывать такие комбинации клавиш как Ctrl+C и Ctrl+Break:

Code:

//-----------------------------------------------------

// Обработчик консольных событий

//-----------------------------------------------------

function ConProc(CtrlType: DWord): Bool; stdcall; far;

var

S: string;

begin

case CtrlType of

   CTRL_C_EVENT: S := 'CTRL_C_EVENT';

   CTRL_BREAK_EVENT: S := 'CTRL_BREAK_EVENT';

   CTRL_CLOSE_EVENT: S := 'CTRL_CLOSE_EVENT';

   CTRL_LOGOFF_EVENT: S := 'CTRL_LOGOFF_EVENT';

   CTRL_SHUTDOWN_EVENT: S := 'CTRL_SHUTDOWN_EVENT';

   else

     S := 'UNKNOWN_EVENT';

end;

MessageBox(0, PChar(S + ' detected'), 'Win32 Console', MB_OK);

Result := True;

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить