Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.04.2015, 09:13
HMR HMR вне форума
Прохожий
 
Регистрация: 25.11.2011
Сообщения: 26
Репутация: 10
По умолчанию Горячие клавиши и THotKey

Помогите разобраться, как правильно зарегистрировать глобальные горячие клавиши, что делаю не так, может кто подсказать.
Вложения
Тип файла: zip HotKey.zip (3.7 Кбайт, 0 просмотров)
Ответить с цитированием
  #2  
Старый 13.04.2015, 06:08
HMR HMR вне форума
Прохожий
 
Регистрация: 25.11.2011
Сообщения: 26
Репутация: 10
По умолчанию

Вот исходник, что не так делаю?
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    HotKey1: THotKey;
    HotKey2: THotKey;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    hk_1, hk_2: Integer;
    procedure WMHotKey(var Mess:TWMHotKey);message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMHotKey(var Mess: TWMHotKey);
begin
if mess.HotKey=hk_1 then showmessage('Комбинация клавиш 1');
if mess.HotKey=hk_2 then showmessage('Комбинация клавиш 2');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 hk_1:=GlobalAddAtom('Hotkey1');
 RegisterHotKey(Handle, hk_1 , 0, HotKey1.HotKey);
 hk_2:=GlobalAddAtom('Hotkey2');
 RegisterHotKey(Handle, hk_2 , 0, HotKey2.HotKey);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Handle, hk_1);
  GlobalDeleteAtom(hk_1);
  UnRegisterHotKey(Handle, hk_2);
  GlobalDeleteAtom(hk_2);
end;

end.
Ответить с цитированием
  #3  
Старый 13.04.2015, 08:20
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

для Ctrl+F1 и Ctrl+F2 :
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure WMHOTKEY(var Message: TWMHotKey); message WM_HOTKEY;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, 1, MOD_CONTROL, VK_F1);
  RegisterHotKey(Handle, 2, MOD_CONTROL, VK_F2);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnregisterHotKey(Handle, 1);
  UnregisterHotKey(Handle, 2);
end;

procedure TForm1.WMHOTKEY(var Message: TWMHotKey);
begin
  case Message.HotKey of
    1: ShowMessage('1');
    2: ShowMessage('2');
  end;
end;

end.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 13.04.2015, 08:59
HMR HMR вне форума
Прохожий
 
Регистрация: 25.11.2011
Сообщения: 26
Репутация: 10
По умолчанию

Это я знаю как сделать, у меня проблема с компонентом THotKey, как с помощью него зарегистрировать клавиши. Нужно менять комбинации горячих клавиш в программе.
Ответить с цитированием
  #5  
Старый 13.04.2015, 10:53
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
procedure ShortCutToModifiersKey(ShortCut: TShortCut;
  var Modifiers: Cardinal; var Key: Cardinal);
begin
  Key := ShortCut and not (scShift + scCtrl + scAlt);
  Modifiers := 0;
  if ShortCut and scShift <> 0 then Modifiers := Modifiers or MOD_SHIFT;
  if ShortCut and scCtrl <> 0 then Modifiers := Modifiers or MOD_CONTROL;
  if ShortCut and scAlt <> 0 then Modifiers := Modifiers or MOD_ALT;
end;

Код:
var
  Modifiers: Cardinal;
  Key: Cardinal;
begin
  ShortCutToModifiersKey(HotKey1.HotKey, Modifiers, Key);
  RegisterHotKey(Handle, 1, Modifiers, Key);
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
HMR (13.04.2015)
  #6  
Старый 13.04.2015, 11:20
HMR HMR вне форума
Прохожий
 
Регистрация: 25.11.2011
Сообщения: 26
Репутация: 10
По умолчанию

Огромное спасибо, снова выручили)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:57.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025