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.
Hosted by uCoz