Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа3.doc
Скачиваний:
4
Добавлен:
06.11.2018
Размер:
281.09 Кб
Скачать
    1. Системное меню

Сейчас мы с вами посмотрим, как можно в вашем приложении изменить системное меню. Это меню, как известно, появляется при нажатии на иконке в левом верхнем углу вашего приложения:

Часто для небольшого приложения вполне достаточно изменения только этого меню (если вам всего надо добавить только 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 "О программе ...".

    1. Назначение клавиш

Комбинации клавиш позволяют пользователю быстро выбирать те или иные действия (типичный пример - это комбинации 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+эта буква:

Таким способом можно задавать комбинации клавиш и на этапе разработки, и на этапе работы программы.