-
Системное меню
Сейчас мы с вами посмотрим, как можно в вашем приложении изменить системное меню. Это меню, как известно, появляется при нажатии на иконке в левом верхнем углу вашего приложения:
Часто для небольшого приложения вполне достаточно изменения только этого меню (если вам всего надо добавить только 1-2 пункта в ваше приложение). Для изменения этого меню мы должны использовать API-функцию InsertMenu. Также нам пригодится API-функция GetSystemMenu - она возвращает указатель на системное меню. Вот конкретный пример кода:
...
menu:=GetSystemMenu(Handle, False);
InsertMenu(menu, 5, MF_ByPosition, 1000, 'About');
...
Этот код надо поместить, например, в обработчик нажатия кнопки (при нажатии на которую и будет добавляться в системное меню новый пункт). Разумеется, переменная menu типа HMENU должна быть до этого определена:
...
var
menu: HMENU;
...
Параметры у функции InsertMenu следующие: первый - это указатель на системное меню. Его мы получили через API-функцию GetSystemMenu. Второй - это номер позиции, на которую наш новый пункт меню вставится (нумерация идет с нуля!). Значение третьего параметра (MF_ByPosition) говорит о том, что второй параметр интерпретируется именно как номер позиции для нового пункта меню. Четвертый - это идентификатор меню (мы задали для него значение 1000). И, наконец, пятый - это заголовок нового пункта меню.
При запуске программы и нажатии на кнопку с добавленным в ее обработчик кодом в системном меню появится новый пункт:
Сейчас при выборе этого пункта ничего не происходит. Давайте добавим обработчик. Для этого вносим объявление нового обработчика в соответствующее место кода нашей формы:
type
...
procedure SystemMenu(var Msg:TMessage); Message WM_SysCommand;
...
Далее пишем сам обработчик:
...
procedure TForm1.SystemMenu(var Msg:TMessage);
begin
if Msg.wParam=1000 Then {если выбрали меню с идентификатором 1000} ShowMessage('О программе ...');
inherited;
end;
...
Теперь при выборе нашего пункта меню естественно появится Messagebox "О программе ...".
-
Назначение клавиш
Комбинации клавиш позволяют пользователю быстро выбирать те или иные действия (типичный пример - это комбинации Ctrl+X, Ctrl+C, и Ctrl+V для вырезания, копирования и вставки).
Комбинации клавиш могут задаваться как на этапе разработки, так и на этапе выполнения программы. Для задания комбинаций клавиш на этапе разработки надо использовать свойство ShortCut (это свойство есть не у всех компонентов, из распространенных оно есть у подменю):
Для задания комбинации клавиш на этапе работы программы используется специальный компонент HotKey, который расположен на вкладке Win32 Палитры компонентов:
Вот пример использования компонента HotKey и свойства ShortCut на этапе разработки:
...
Menu1.ShortCut:=HotKey1.HotKey;
...
В этом примере пункту меню Menu1 присваивается новая комбинация клавиш, задаваемая пользователем в компоненте HotKey1.
Из свойств компонента HotKey отметим два: Modifiers и InvalidKeys. Первое из них отвечает за то, какие клавиши-модификаторы (Alt, Ctrl, Shift или любые их комбинации) могут использоваться для задания комбинации клавиш, второе - какие клавиши-модификаторы использовать нельзя. Оба этих свойства задаются в Инспекторе объектов Modifiers и InvalidKeys:
Другой способ задания комбинаций клавиш для какого-нибудь элемента - это его свойство Caption. Если перед некоторой буквой поставить знак амперсанта (&), то эта буква окажется подчеркнутой и для нее будет действовать комбинация клавиш Alt+эта буква:
Таким способом можно задавать комбинации клавиш и на этапе разработки, и на этапе работы программы.