Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
[Win32] Горячие клавиши. 23.07.02 09:34 Число просмотров: 935
Автор: ggg <ggg> Статус: Elderman
|
не знаю как в дельфи
должно быть что то типа WM_HOTKEY & RegisterHotKey
|
<programming>
|
[win32] [delphi] гориячие клавиши. 23.07.02 01:25
Автор: Cyber Style Статус: Незарегистрированный пользователь
|
Как в системе проследить за нажатием комбинации клавиш (например Ctrl+Alt+End)?
|
|
[win32] [delphi] а правда, где тебе надо? 23.07.02 16:29
Автор: HandleX <Александр М.> Статус: The Elderman
|
> Как в системе проследить за нажатием комбинации клавиш > (например Ctrl+Alt+End)?
Если в системе, то без системных ловушек не обойтись. А если на форме, то ставишь, например свойство своей Form1.KeyPreview = True. Потом в событии OnKeyDown\Up следишь за клавишами. Или на форме, если есть главное меню, добавляешь невидимый пункт меню, в котором Visible = False, а ShortCut ставишь какой тебе надо.
|
| |
ни за что не поверю... 23.07.02 19:41
Автор: ggg <ggg> Статус: Elderman
|
что в дельфи нельзя вызвать что то типа RegisterHotKey
это же обычная функция из user32.dll
и она (выписка из MSDN):
The RegisterHotKey function defines a system-wide hot key
что вы все привязались к ловушкам
|
|
[win32] [delphi] горячие клавиши. 23.07.02 13:51
Автор: Cyril <sc> Статус: Member
|
> Как в системе проследить за нажатием комбинации клавиш > (например Ctrl+Alt+End)? если я правильно понял, то хочется обрабатывать комбинации клавиш
даже когда твое приложение не получает фокус?
Если так, то тебе необходимо установить свою KeyboardProc hook процедуру.
|
| |
зачем так жестоко :) 23.07.02 15:51
Автор: ggg <ggg> Статус: Elderman
|
ещё скажи свой драйвер клавиатуры
|
| | |
[Delphi] Сорри, перемудрил, исправляюсь ;-) 24.07.02 15:20
Автор: Cyril <sc> Статус: Member
|
> ещё скажи свой драйвер клавиатуры
вот небольшой примерчик на дельфях
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
comctrls, StdCtrls, menus;
const
UNIQUE_ID = $03BF; // уникальный идентификатор для горячей клавиши
type
TForm1 = class(TForm)
HotKey : THotKey;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure HotKeyExit(Sender: TObject);
private
{ Private declarations }
public
procedure HotKeyMsgHandler(var message : TMessage); message WM_HOTKEY;
procedure RegisterHotKeyId;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.HotKeyMsgHandler(var message: TMessage);
begin
SetForegroundwindow(Form1.Handle);
end;
procedure TForm1.RegisterHotKeyId;
var
virt_key : word;
fkMod : word;
shift_state : TShiftState;
begin
fkMod := 0;
ShortCutToKey(HotKey.HotKey, virt_key, shift_state);
if ssShift in shift_state then fkMod := fkMod OR MOD_SHIFT;
if ssAlt in shift_state then fkMod := fkMod OR MOD_ALT;
if ssCtrl in shift_state then fkMod := fkMod OR MOD_CONTROL;
RegisterHotKey(Form1.Handle, UNIQUE_ID, fkMod, virt_key);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKeyId;
// кнопка для того чтобы зарегистрировать новую горячую клавишу
Button1.Caption :='Применить';
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(Form1.Handle, UNIQUE_ID);
end;
procedure TForm1.HotKeyExit(Sender: TObject);
begin
UnRegisterHotKey(Form1.Handle, UNIQUE_ID);
RegisterHotKeyId;
end;
end.
---
|
|
[Win32] Горячие клавиши. 23.07.02 09:34
Автор: ggg <ggg> Статус: Elderman
|
не знаю как в дельфи
должно быть что то типа WM_HOTKEY & RegisterHotKey
|
|
|