Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2007, 23:46   #1
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Вопрос Как использовать компонент HotKey ?

Как использовать компонент HotKey для регистрации системных горячих клавиш ?
Очень надо, колличество сочетаний клавиш от 2 до 3 (Например: Ctrl+F1, Ctrl+Shift+R ). Как обычно сохранять выбранные комбинации HotKey`ев в файл, для дальнейшей регистрации в системе при старте.
Alter вне форума Ответить с цитированием
Старый 03.09.2007, 08:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Этот компонент не регистрит клавиши а просто формирует выбранное тобой сочетание клавиш, которые потом можно зарегистрировать
У него есть свойство HotKey, которое содержит выбранное тобой сочетание, его и сохраняй
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2007, 11:13   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Если в свойствах HotKey нет нужных клавиш, напиши код при создании формы, например
HotKey1.HotKey:=49217; //ctrl+alt+a

Узнать все коды клавиш можешь так

procedure TForm1.HotKey1Change(Sender: TObject);
begin
Form1.Caption:=IntToStr(HotKey1.Hot Key)
end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 03.09.2007, 16:28   #4
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

Цитата:
Сообщение от Stilet Посмотреть сообщение
Этот компонент не регистрит клавиши а просто формирует выбранное тобой сочетание клавиш, которые потом можно зарегистрировать
У него есть свойство HotKey, которое содержит выбранное тобой сочетание, его и сохраняй
Я знаю что он только даёт выбрать сочетания, я хочу чтобы пользователь во время выполнения программы смог выставить горячие клавиши в системе в программе(типа Punto Switcher).
Как их потом использовать в
function RegisterHotKey(hWnd: HWND; id: Integer; fsModifiers, vk: UINT): BOOL;
или можно проверять значения всех Message с кодом в компоненте HotKey?

Примерно так можно ??
procedure TForm1.WMHotkey( var msg: TWMHotkey );
begin
if msg.hotkey = HotKey1.HotKey then
begin
Close;
end;
end;
Alter вне форума Ответить с цитированием
Старый 03.09.2007, 16:39   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не обязательно через RegisterHotKey, можно еще через TAction.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2007, 16:46   #6
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не обязательно через RegisterHotKey, можно еще через TAction.
А примерчик можно с применением TAction. Чтобы иметь о нём представление.
Alter вне форума Ответить с цитированием
Старый 05.09.2007, 23:36   #7
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Восклицание Ужас

Что-то неполучается зарегистрировать в системе выбраные в HotKey компоненте клавиши. Что делать?? По всякому пробывал, недопонимаю как в других программах их создают во время работы программы.

Идеи, предложения.
Ждём.
Alter вне форума Ответить с цитированием
Старый 06.09.2007, 09:20   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Сообщение от Alter Посмотреть сообщение
А примерчик можно с применением TAction. Чтобы иметь о нём представление.
Конечно можно : Итак на форму кинь TActionManager,THotKey и ТEdit
Далее открой ActionManager кликнув по нему два раза и создай New Action по соответствующей кнопке (читай хинты если не знаеш где она)
Далее опиши для этого Action1, который создастся событие OnExecute ^

procedure TForm1.Action1Execute(Sender: TObject);
begin
ShowMessage('qweqwewq');
end;


Далее опиши OnChange для HotKey :

procedure TForm1.HotKey1Change(Sender: TObject);
begin
Action1.ShortCut:=HotKey1.HotKey;
end;


Этот код свяжет шорткут актиона и того что ты там введеш в ХотКее.

Все. Эдит на форму мы кинули для красоты, и чтоб на нем проверять.

Итак: Запусти, стань на HotKey и набери нужную тебе Горячую клавишу.
Далее перейди в Эдит и нажми выбраную тобой комбинацию - должен сработать твой action1 (см. код выше)

Все просто.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.09.2007, 09:23   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А еще чуть не забыл - вот весь код на всякий случай :

unit Unit1;

interface

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

type
TForm1 = class(TForm)
ActionManager1: TActionManager;
Action1: TAction;
HotKey1: THotKey;
Edit1: TEdit;
procedure Action1Execute(Sender: TObject);
procedure HotKey1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Action1Execute(Sender: TObject);
begin
ShowMessage('qweqwewq');
end;

procedure TForm1.HotKey1Change(Sender: TObject);
begin
Action1.ShortCut:=HotKey1.HotKey;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.09.2007, 17:03   #10
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Восклицание ГЛОБАЛЬНЫЕ СИСТЕМНЫЕ ГОРЯЧИИ КЛАВИШИ!

Цитата:
Сообщение от Stilet Посмотреть сообщение
А еще чуть не забыл - вот весь код на всякий случай :

unit Unit1;

interface

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

type
TForm1 = class(TForm)
ActionManager1: TActionManager;
Action1: TAction;
HotKey1: THotKey;
Edit1: TEdit;
procedure Action1Execute(Sender: TObject);
procedure HotKey1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Action1Execute(Sender: TObject);
begin
ShowMessage('qweqwewq');
end;

procedure TForm1.HotKey1Change(Sender: TObject);
begin
Action1.ShortCut:=HotKey1.HotKey;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.
Я проверил, работает.
Но работает не так как надо:
1) Реагирует на назначенный HotKey только тогда когда программа имеет фокус или активна.
2) Надо чтобы программа свёрнутая в трей реагировала на назначенные HotKey, даже тогда когда программа вообще нигде невидна и неимеет никакого фокуса.
Alter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HotKey Simply-Art Win Api 16 15.08.2008 12:10
KOL HotKey Simply-Art Помощь студентам 6 13.08.2008 11:01
Какой компонент использовать? XPAiN БД в Delphi 3 05.05.2008 08:45
Потомок от HotKey Alter Компоненты Delphi 4 03.01.2008 15:47
как зарегестрировать горячую клавишу с помощью HotKey GAGARIN-NEW Компоненты Delphi 3 09.11.2007 08:22