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.
