СообЧа > База Знаний > Программирование > Delphi

Вопрос

При нажатии на иконку в заголовке окна видим меню (свернуть, переместить, закрыть, ..). Как внести туда свои строчки?

Ответ

Отвечаю как можно подробнее и понятнее.

Для изменения этого меню мы должны использовать 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 «О программе …».

Садыков Алексей Николаевич



Copyright © 2000-2004 Сообщество Чайников
Контактная информация