Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
ВнизОтлов нажатия определенной комбинации клавиш Найти похожие ветки
← →
cruiser © (2008-09-19 13:03) [0]Здравствуйте. Подскажите пожалуйста, как сделать отлов программой нажатий определенной комбинации клавиш, например Ctrl+anykey или Shift+anykey ? Причем мониторинг нажатий должен быть постоянно.
← →
Palladin © (2008-09-19 13:08) [1]где ты их ловить собрался?
← →
cruiser © (2008-09-19 13:14) [2]Вопрос не очень понял, но
значит задача поставлена так:
Программа запущена
При нажатии "горячих клавиш" программа на это как-то реагирует (например делает showmessage:) ).
При это остальные функции программы должны работать в штатном режиме
← →
Правильный$Вася (2008-09-19 13:14) [3]для формы, программы в цедом или даже для всей системы?
← →
cruiser © (2008-09-19 13:16) [4]Для формы. Т.е. при активной окне программы.
← →
cruiser © (2008-09-19 13:17) [5]программа состоит из одной формы
← →
Vlad Oshin © (2008-09-19 13:18) [6]type
TForm3 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
id1: Integer;
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
public { Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.WMHotKey(var Msg: TWMHotKey);
begin
showmessage("");
end;
procedure TForm3.FormCreate(Sender: TObject);
const
MOD_ALT = 1;
MOD_CONTROL = 2;
MOD_SHIFT = 4;
MOD_WIN = 8;
begin
id1 := GlobalAddAtom("Hotkey-MOD+PTRSCR");
RegisterHotKey(Handle, id1, MOD_CONTROL+MOD_SHIFT, $5a );
end;
procedure TForm3.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(Handle, id1);
GlobalDeleteAtom(id1);
end;
← →
cruiser © (2008-09-19 13:20) [7]А прокомментировать можете что и где отрабатывается и при каких нажатиях программа реагирует и как?
← →
Vlad Oshin © (2008-09-19 13:30) [8]
> id1 := GlobalAddAtom("Hotkey-MOD+PTRSCR");
> RegisterHotKey(Handle, id1, MOD_CONTROL+MOD_SHIFT, $5a
> );
регистрируется_горячая_клавиша MOD_CONTROL+MOD_SHIFT+$5a (Z, вроде. чего бы не глянуть в хелп? )
procedure TForm3.WMHotKey(var Msg: TWMHotKey);
begin
if Msg.HotKey = id1
then
showmessage("");
end;
лишнего стер, извинения
← →
cruiser © (2008-09-19 13:32) [9]Спасибо огромное! В хелпе посмотрю. Т.е. получается отрабатываем нажатие Ctrl+Shift+Z ?
← →
Vlad Oshin © (2008-09-19 13:39) [10]да, только это будет срабатывать даже когда не активна форма/приложение
← →
cruiser © (2008-09-19 13:42) [11]О. Спасибо за дополнение к ответу. Это не очень удобно. А что надо дописать что бы именно при активном окне программы срабатывала комбинация?
← →
Dennis I. Komarov © (2008-09-19 13:49) [12]ИМХО TAction + HotKey, ибо
> cruiser © (19.09.08 13:16) [4]
> Для формы. Т.е. при активной окне программы.
> cruiser © (19.09.08 13:17) [5]
> программа состоит из одной формы
← →
cruiser © (2008-09-19 13:51) [13]Простите, Dennis I. Komarov, а куда это вписать в приведенном выше листинге?
← →
Dennis I. Komarov © (2008-09-19 14:05) [14]
> + HotKey
Пардонс, ShortCut
> cruiser © (19.09.08 13:51) [13]
> Простите, Dennis I. Komarov, а куда это вписать в приведенном
> выше листинге?
Чьемс?
← →
cruiser © (2008-09-19 14:08) [15]Не понял вопроса. Вот Vlad Oshin написал листинг для отлова нажатия клавиш. Но как оказывается этот отлов будет работать даже если окно программы неактивно. Я задал вопрос что нужно изменить в листинге, что бы отлов работал только при активном окне программы. На что Вы ответили "ИМХО TAction + HotKey". Я подумал, что это надо где-то прописать в листинге Vlad Oshin или я не правильно Вас понял? Тогда можете привести уже готовый пример как должно быть?
← →
Vlad Oshin © (2008-09-19 14:13) [16]если нравится мой листинг :) то воткните в процедуру
if GetForegroundWindow<>Form3.Handle then exit;
← →
cruiser © (2008-09-19 14:15) [17]Спасибо Vlad Oshin. В какую процедуру именно и как должен выглядеть в законченном варианте листинг? Заранее благодарю.
← →
Dennis I. Komarov © (2008-09-19 14:15) [18]нет, я отвечал на [0]
И никуда это вставлять не надо. Надо создать экземляр класса TAction и присвоить ему нудное свойство ShortCut. В OnExecute прописать нужные действия...
← →
Smile (2008-09-19 14:16) [19]Думаю, что при такой постановке вопроса, автора вполне удовлетворит MaiMenu (Visible:= False), с соответствующими ShortCut-ами:)
← →
cruiser © (2008-09-19 14:16) [20]Dennis I. Komarov, спасибо тоже за ответ. Но мне бы подробнее с наглядным примером, если можно...
← →
Vlad Oshin © (2008-09-19 14:22) [21]
> Спасибо Vlad Oshin. В какую процедуру именно и как должен
> выглядеть в законченном варианте листинг? Заранее благодарю
не за что. Тем более не понял я вопроса изначально, так что ответы др. участников предпочтительнее.
По поводу процедуры:
Их там 3 (три). Можно на худой конец подумать самому в какую? Крайняк перебрать, не так много вариантов :)
← →
cruiser © (2008-09-19 14:30) [22]Спасибо всем за ответы. Буду пробовать. Мне ещё тут подсказали, что можно с помощью свойства самой формы KeyPreview сделать это. Осуществимо ли это? Если да, то как именно можно сделать такое?
← →
Vlad Oshin © (2008-09-19 14:40) [23]Совсем думать не хотите..
Как хотите
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
KeyPreview:=true;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (ssShift in Shift) and (ssCtrl in Shift) and (Key=$5a) then ShowMessage("");
end;
end.
← →
cruiser © (2008-09-19 14:45) [24]Огромное спасибо! То что надо!
← →
Dennis I. Komarov © (2008-09-19 14:48) [25]
> cruiser © (19.09.08 14:16) [20]
Это противоречит логики...
Все это очень просто делается даже в DT с VCL, надо просто немного подумать...
ЗЫ TActionList в помощь
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.005 c