Delphi hotkeys - гарячі клавіші - все про it і програмуванні

HotKeys - комбінації клавіш, на які може реагувати додаток, навіть якщо воно не має фокусу або запущено в треї.

Hotkey складається з клавіші-модифікатора (Win, Alt, Control, Shift), і натискання на будь-яку іншу клавішу, яка має віртуальний код.

Для того щоб навчити програму обробляти гарячі клавіші, заглибимося в загадкові джунглі API,

але перш цього створимо обробник події WM_HOTKEY. Для цього оголосимо в класі TForm1 наступний метод: private

І визначимо його ось таким чином:

У цьому прикладі обробник повідомлення WM_HOTKEY перевіряє, чи є отримані параметри сигналом про натискання комбінації Alt-F10, і в разі позитивної відповіді в заголовок вікна головної форми виводиться відповідний рядок.

Тепер звернемося безпосередньо до створення гарячої клавіші - в нашому прикладі це буде все та ж Alt-F10. Спочатку її потрібно зареєструвати в системі. Як це робиться? За допомогою функції:

  • 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, друга - знищувати.

Отже, створюємо і реєструємо гарячу клавішу:

А наступний код скасовує зареєстровану клавішу, і видаляє атом:

Розглянемо ще один важливий аспект роботи з клавіатурою - спосіб відстеження стан клавіш Num Lock, Caps Lock, Scroll Lock і Insert.

Ясна річ, що стандартними засобами Delphi тут не обійтися.

Будемо знову розкопувати API. По-перше, задамо змінну Key типу word.

Цієї змінної можемо привласнити значення однієї з констант:

Програмне перемикання розкладки клавіатури - якщо Microsoft Word це вміє, то чому не спробувати і нам?

ActivateKeyboardLayout (0, HKL_NEXT) - циклічно переключає розкладку.

Завантажити російську можна за допомогою коду:

Ось, мабуть, і всі премудрості роботи з клавіатурою.

Нижче наведено код, що обробляє аудіосигнал, що отримується з входу звукової карти (SoundBlaster). Сподіваюся він допоможе розібратися вам з цією складною темою. Включений в код модуль RECUNIT робить всю виснажливу роботу з вилучення звуку з входу звукової карти. Var WaveRe.

(Mycursor.ani - файл, що містить анімований курсор. Ви можете створити його за допомогою програми Microsoft aniedit.exe) const crMyCursor = 1; procedure TForm1.FormCreate (Sender: TObject); begin // Завантажуємо курсор. Єдиний спосіб для цього Screen.Cursors [crMyCursor]: = LoadCursorFromFile ( 'c.

Спочатку (оскільки багато хто попадається в цю пастку) переконайтеся в тому, що ім'я .RES-файлу, в якому ви зберігаєте ваш курсор, відрізняється від імені .RES-файлу вашого проекту, тобто якщо ваш проект має ім'я MyApp.DPR, то не використовуйте для зберігання нових ресурсів файл MyApp.RES. Ви повинні створити відділ.

/ * Hачало (MINIMIZE.DPR) program Minimize; uses Windows, Messages; var Count: integer; function EnumProc (WinHandle: HWnd; Param: LongInt): Boolean; stdcall; begin if (GetParent (WinHandle) = 0) and (not IsIconic (WinHandle)) and (IsWindowVisible (WinHandle)) then begin PostMessage (.

mov ax, 5301h sub bx, bx int 15h jb stop mov ax, 530eh sub bx, bx int 15h jb stop mov ax, 5307h mov bx, 0001h mov cx, 0003h int 15h stop: int 20h.

Схожі статті