Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 4
Всего онлайн: 4
Зарегистрировано юзеров: 6362
Комментариев на сайте: 645
Новый юзер: Pseulairrerve



Последние комментарии
c
Aqel прокомментировал "Урок 71 - Работа с сжатыми файлами":
GZip псевдоархив, на мой вопрос тоже не отвечают, как распаковать отдельные файлы/папки...
Pingitrus прокомментировал "Урок 71 - Работа с сжатыми файлами":
Есть еще кто нибудь живой на этом сайте, кто сможет помочь? Так то все работает, zip и rar распаковывает, но у меня есть файл dat который сжат GZip, почему то его не удается распаковать или так не получится так как этот файл не является архивом или является?)) пишет ошибку что неверная функция



Мы в соцсетях
c
Delphi
HotKeys - горячие клавиши

HotKeys - комбинации клавиш, на которые может реагировать приложение, даже если оно не имеет фокуса или запущено в трее.
Hotkey состоит из клавиши-модификатора (Win, Alt, Control, Shift), и нажатия на любую другую клавишу, которая имеет виртуальный код.

Для того чтобы научить программу обрабатывать горячие клавиши, углубимся в загадочные джунгли API, но прежде этого создадим обработчик события WM_HOTKEY. Для этого объявим в классе TForm1 следующий метод: private

procedure WM_HotKeyHandler (var Message: TMessage);
message WM_HOTKEY;
И определим его вот таким образом:
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;
В этом примере обработчик сообщения WM_HOTKEY проверяет, являются ли полученные параметры сигналом о нажатии комбинации Alt-F10, и в случае положительного ответа в заголовок окна главной формы выводится соответствующая строка. Теперь обратимся непосредственно к созданию горячей клавиши - в нашем примере это будет все та же Alt-F10. Вначале ее нужно зарегистрировать в системе. Как это делается? При помощи функции:

BOOL RegisterHotKey(HWND hWnd, int id, UINT fsModifiers, UINT vk);
hWnd - окно, обрабатывающее сообщение WM_HOTKEY,
fsModifiers - модификаторы (MOD_ALT, MOD_CONTROL, MOD_SHIFT, MOD_WIN),
vk - виртуальный код клавиши (см. константы с префиксом VK_).


Параметр id заслуживает отдельного разговора. Для приложения значение id может лежать в диапазоне 0000h..BFFFh, а для разделяемых динамических библиотек диапазон будет таким: C000h..FFFFh. Однако во избежание конфликтов между горячими клавишами различных процессов целесообразно использовать значение, возвращаемое функцией GlobalAddAtom, передавая ей в качестве параметра некую null-terminated строку длиной до 255 символов.

Вот как это делается:
Объявим глобальную переменную keyid: integer;
Она станет атомом, который создастся вышеописанной функцией, и будет служить идентификатором горячей клавиши. Для удобства поместим на форму две кнопки - первая будет создавать HotKey, вторая - уничтожать. Итак, создаем и регистрируем горячую клавишу:
procedure TForm1.Button1Click(Sender: TObject);
begin
keyid:=GlobalAddAtom('My Hotkey'); //создаем атом
RegisterHotKey(handle,// сообщение о HotKey будет получать форма
keyid, // регистрируем атом как id
MOD_ALT,// модификатор у нас - клавиша Alt
VK_F10 // вирт. клавиша - F10
);
end;
А следующий код отменяет зарегистрированную клавишу, и удаляет атом:
procedure TForm1.Button3Click(Sender: TObject);
begin
UnregisterHotKey(handle, keyid);
GlobalDeleteAtom(keyid);
end;
Рассмотрим еще один важный аспект работы с клавиатурой - способ отслеживания состояние клавиш Num Lock, Caps Lock, Scroll Lock и Insert. Понятное дело, что стандартными средствами Delphi тут не обойтись. Будем снова раскапывать API. Во-первых, зададим переменную Key типа word. Этой переменной можем присвоить значение одной из констант:
VK_NUMLOCK
VK_CAPITAL
VK_SCROLL
VK_INSERT

Теперь:
Var state: TKeyboardState;
begin
GetKeyboardState(state); //получить состояние клавиши
if Odd(state[VK_NUMLOCK]) then ; //клавиша "включена"
//как управлять состоянием клавиши?
state[key] := state[key] XOR 1; //циклично переключить
state[key] := state[key] OR 1; //включить
state[key] := state[key] AND (NOT 1); //выключить
SetKeyboardState(state); //установим новое значение
end;
Программное переключение раскладки клавиатуры - если Microsoft Word это умеет, то почему не попробовать и нам? ActivateKeyboardLayout(0,HKL_NEXT) - циклично переключает раскладку.
Загрузить русскую можно с помощью кода:
LoadKeyboardLayout('00000419', KLF_ACTIVATE), 
а английскую
LoadKeyboardLayout('00000409',KLF_ACTIVATE). 
Вот, пожалуй, и все премудрости работы с клавиатурой.

Вот и всё, Удачи!

Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 10 Августа 2014
Просмотров: 3708


Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.