Создание и назначение горячих клавиш в Delphi 7

Рейтинг: 1Ответов: 1Опубликовано: 04.03.2015

Допустим, на форме есть два Label и две кнопки. Каким образом можно назначить горячие клавиши, чтобы, например, Ctrl+A активировала процедуру первой кнопки, а CTRL+S второй?

Пытался решить задачу следующим образом:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
   if (ssCtrl in Shift) and (chr(Key) in ['A', 'a']) then
   form1.Button1Click(nil);
end;

Но, к сожалению, безуспешно.

Ответы

▲ 1Принят
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
    ID = WM_USER + 1;

type
  Tform_Test = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  form_Test: Tform_Test;

implementation

{$R *.dfm}

procedure Tform_Test.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, ID, MOD_CONTROL, Ord('S'));
 // здесь указываешь свою комбинацию клавиш

end;

procedure Tform_Test.FormDestroy(Sender: TObject);
begin
  UnregisterHotkey(Handle, ID);
end;

procedure Tform_Test.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = ID then
    Button1Click(nil);
end;

procedure Tform_Test.Button1Click(Sender: TObject);
begin
  ShowMessage('Hello');
end;

end.