unit HotKey; { Использование горячей клавиши (на примере клавиши Escape) } interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); private procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; end; var Form1: TForm1; implementation {$R *.dfm} const MyHotKey = 27; var BtnEsc: boolean; procedure TForm1.WMHotKey(var Msg: TWMHotKey); begin BtnEsc:= true; // Нажата горячая клавиша Esc - для прерывания операции end; procedure TForm1.FormCreate(Sender: TObject); begin // регистрация горячей клавиши Esc RegisterHotKey(Handle, MyHotKey, 0, MyHotKey); // - Form.Handle Label1.Caption:=''; end; procedure TForm1.Button1Click(Sender: TObject); var i: int64; begin BtnEsc:= false; Button1.Enabled:= false; Label1.Caption:= 'Нажмите клавишу Esc'; Application.ProcessMessages; i:=0; repeat // идет какой-нибудь циклический процесс... inc(i); // - например Application.ProcessMessages; // не забывать это полезное слово if BtnEsc then break until i = 0; // - здесь можно использовать бесконечный цикл Label1.Caption:= IntToStr(i); BtnEsc:= false; Button1.Enabled:= true; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin // удалить регистрацию горячей клавиши Esc UnRegisterHotKey(Handle, MyHotKey); end; end.