Форум: "Начинающим";
Текущий архив: 2009.03.01;
Скачать: [xml.tar.bz2];
Внизработа в горячей клавишей... Найти похожие ветки
← →
vegarulez © (2009-01-16 11:43) [0]Привет всем мастерам, подскажите как сделать горячую клавишу, но только чтобы он работала только когда форма приложения активна, т.е. если пользователь сделал активным любое другое приложение горячая клавиша не работала в этом случае и не перехватывала нажатие. сечас делаю вот таким образом, но она ловит любое нажатие.
кстати ещё попутный вопрос почему ALT+F10 работает на ура а при ALT + Enter (VK_Return) - не работает?unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
procedure WM_HotKeyHandler (var Message: TMessage);message WM_HOTKEY;
{ Private declarations }
public
keyid:integer;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WM_HotKeyHandler (var Message: TMessage);
var
idHotKey: integer; //идентификатор, но об этом - позже
fuModifiers: word; //модификатор MOD_XX
uVirtKey: word; //код виртуальной клавиши VK_XX
begin
// параметры сообщения получаем так:
idHotkey:= Message.wParam;
fuModifiers:= LOWORD(Message.lParam);
uVirtKey:= HIWORD(Message.lParam);
//теперь - небольшая проверочка:
if (fuModifiers = MOD_ALT) AND (uVirtKey = VK_F10) then
caption:="Alt-F10 нажата";
inherited;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
keyid:=GlobalAddAtom("My Hotkey"); //создаем атом
RegisterHotKey(handle,
// сообщение о HotKey будет получать форма
keyid, // регистрируем атом как id
MOD_SHIFT,// модификатор у нас - клавиша Alt
VK_RETURN//VK_F10 // вирт. клавиша - F10
);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
UnregisterHotKey(handle, keyid);
GlobalDeleteAtom(keyid);
end;
end.
← →
vegarulez © (2009-01-16 11:50) [1]Нашёл для приложения вот такой способ:
Перехват нажатий клавиши внутри приложения. * *
Задача решается очень просто. Можно у формы установить свойство KeyPreview в True и обрабатывать событие OnKeyPress.
всё сделал, но чот не работает... :(
← →
Правильный$Вася (2009-01-16 12:43) [2]
Use the OnKeyPress event handler to make something happen as a result of a single character key press.
The Key parameter in the OnKeyPress event handler is of type Char; therefore, the OnKeyPress event registers the ASCII character of the key pressed. Keys that don"t correspond to an ASCII Char value (Shift or F1, for example) don"t generate an OnKeyPress event. Key combinations (such as Shift+A), generate only one OnKeyPress event (for this example, Shift+A results in a Key value of “A” if Caps Lock is off). To respond to non-ASCII keys or key combinations, use the OnKeyDown or OnKeyUp event handlers.
← →
vegarulez © (2009-01-16 13:33) [3]
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then
caption:="Нажат Ентер";
end;
результат=0
а вот в онкэйап - заработало )
спасиб.
← →
vegarulez © (2009-01-16 13:33) [4]
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then
caption:="Нажат Ентер";
end;
результат=0
а вот в онкэйап - заработало )
спасиб.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.03.01;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c