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

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 7
Всего онлайн: 7
Зарегистрировано юзеров: 7938
Комментариев на сайте: 698
Новый юзер: Henryfar



Последние комментарии
c
Dennisvoifs прокомментировал "Урок 3 - Конструкция IF...THEN...ELSE":
Пункт коммерческого учета цена, Ктп комплектные трансформаторные подстанции москва, Производство ктп москва и не только Вы найдете на нашем специализированном сайте: - Вам к нам!https://sviloguzov.ru/
Arthurneime прокомментировал "Урок 53 - Потоки в Delphi, (часть 1/3)":
[img]https://masterfutures.ru/wp-content/uploads/2020/03/14-2.png[/img] Online trading is becoming increasingly popular, as more people learn of the earning potential of platforms such as Broker, a broker which caters to a significant audience of digital traders (12 million and counting). Known for their excellent user interface, as well as fast deposit and withdrawal times, Broker provides multiple features to help traders earn on the markets. This overview will outline just some of the key aspects traders can expect to enjoy whilst working with Broker broker. Online trading is becoming increasingly popular, as more people learn of the earning potential of platforms such as Broker, a broker which caters to a significant audience of digital traders (12 million and counting). Known for their excellent user interface, as well as fast deposit and withdrawal times, Broker provides multiple features to help traders earn on the markets. This overview will outline just some of the key aspects traders can expect to enjoy whilst working with Broker broker. Broker Broker is operated by a dedicated team, whose main priority has always been to provide the best possible user experience, and ultimately satisfaction. Whether experienced in trading or a newcomer, the platform is easy to use and very responsive. The education section deserves special mention, particularly for assisting traders to learn and implement new strategies – which can be tested on the platforms free demo Source: [url=https://bit.ly/35fv3B6/]Broker[/url] https://bit.ly/35fv3B6/ Tags: Broker

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
Просмотров: 4280


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