Использование таблицы акселераторов
Для использования описанных в файле ресурсов комбинаций клавиш их необходимо загрузить, а также несколько модифицировать цикл выборки сообщений.
Загрузка таблицы акселераторов и получение ее хэндла осуществляется с помощью функции LoadAccelerators:
hAccel := LoadAccelerators(hInstance, 'MyAccel');
Цикл обработки сообщений дополняется вызовом функции проверки комбинаций клавиш по таблице:
while getMessage(msg, 0,0,0) do
if not TranslateAccelerator(hwnd, hAccel, msg) then begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
Функция TranslateAccelerator проверяет, является ли сообщение msg сообщением клавиатуры и, если это так, проводит поиск комбинации нажатых клавиш в таблице акселераторов. Если комбинация найдена, вызывается оконная процедура окна hwnd и ей передается сообщение WM_COMMAND с кодом, идентифицирующим нажатую комбинацию, функция при этом возвращает TRUE. Для сообщений, не приводящих к посылке сообщения WM_COMMAND при трансляции, функция возвращает FALSE.
Параметр hwnd функции TranslateAccelerator позволяет сосредоточить обработку акселераторов в одной оконной процедуре: какое бы окно не являлось получателем сообщения msg (хэндл окна получателя содержится в теле сообщения), сообщение WM_COMMAND будет передано в оконную процедуру принудительно указанного окна hwnd. В качестве hwnd программа обычно должна передавать либо хэндл главного окна, либо хэндл ее активного окна.
Сообщение WM_COMMAND, порождаемое при нажатии быстрой клавиши, имеет следующие параметры:
loword(wParam) - числовой идентификатор комбинации клавиш из таблицы акселераторов
hiword(wparam) = 1; lParam = 0;
Если акселератор соответствует тому или иному пункту меню (имеет тот же идентификатор), то помимо сообщения WM_COMMAND той же оконной процедуре посылаются сообщения активизации меню, т.е. WM_INITMENU, WM_INITMENUPOPUP, WM_MENUSELECT. Если клавиша соответствует запрещенному пункту меню, то сообщения WM_COMMAND и прочие не посылаются.
- Подключение файлов ресурсов к программе
- Ресурсы пользователя
- Inactive - пункт неактивен (не генерирует wm_command), но отображается обычным образом, несовместимо с grayed.
- Основные сообщения меню
- Использование таблицы акселераторов
- Окна диалога
- Библиотеки dll
- Синтаксис исходного текста dll
- Поиск используемых dll
- Подключение dll на этапе загрузки
- Подключение dll на этапе выполнения
- Использование ресурсов из dll
- Задание
- Варианты заданий: