Здесь рассмотрены несколько основных функций для работы с меню. Но так как Delphi предоставляет достаточно удобные средства для работы с меню, здесь не рассматриваются вопросы о РЕАКЦИИ программы на выбор пунктов ГЛАВНОГО меню, зато рассматривается обработка сообщений от меню системного.
Описатель меню HMENU — это
уникальный номер меню в системе. В файле
windows.pas тип HMENU определен так:
type HMENU = Integer
Все параметры как в функции InsertMenu.
Наверх
Помечает пункт меню или снимает пометку (пометка в виде галочки).
... begin CheckMenuItem(Menu,3,mf_byposition or MF_CHECKED);//пометка 3-го пункта меню Menu CheckMenuItem(Menu,3,mf_byposition or MF_UNCHECKED);//снятие пометки с 3-го пункта меню Menu end ... |
Помечает или снимает пометку пункта меню из группы (Пометка в виде точки, действует как переключатель).
Создает новый пустой описатель
меню.
Наверх
Создает описатель всплывающего
меню.
ВНИМАНИЕ:
ВСПЛЫВАЮЩЕЕ [POPUP] МЕНЮ В ПОНИМАНИИ WINDOWS И Delphi
РАЗНЫЕ ВЕЩИ.
В Windows popup меню — это меню которое связано с
другим пунктом меню (который отмечается
треугольничком справа от текста пункта) и
появляется только в то случае, когда
пользователь выбрал этот самый пункт с
треугльничком (другими словами popup меню в
Windows — это подменю).
В Delphi popup меню — Это меню, которое может «Всплывать»
в любой точке экрана
Наверх
Уничтожает описатель меню.
Перерисовывает строку меню окна.
function EnableMenuItem(hMenu: HMENU; uIDEnableItem, uEnable: UINT): BOOL
Делает пункт меню доступным или недоступным.
... Begin EnableMenuItem(Menu,3,mf_byposition or) MF_GRAYED); { Делает недоступным(закрашивает серым цветом (флаг MF_GRAYED)) пункт меню номер 3(флаг MF_BYPOSITION). Если бы вместо mf_grayed было mf_enabled, тогда этот пункт меню сделался бы доступным. } End ... |
Возвращает описатель меню или нуль (если у окна нет меню).
Возвращает количиство пунктов
меню hMenu.
Наверх
Возвращает описатель системного меню окна.
Вствляет пункт меню в определенную
позицию в меню.
Устанавливает ГЛАВНОЕ новое меню у заданного окна. Возвращает True, если всё прошло удачно. После выполнения этой функции строку меню нужно перерисовать функцией DrawMenuBar
... {...где-то здесь получен описатель hM нового меню...} //Хотим заменить меню окна с описателем wnd SetMenu(wnd,hM); DrawMenuBar; ... |
MF_INSERT = 0; MF_CHANGE = $80; MF_APPEND = $100; MF_DELETE = $200; MF_REMOVE = $1000; MF_BYCOMMAND = 0; MF_BYPOSITION = $400; MF_SEPARATOR = $800 MF_ENABLED = 0; MF_GRAYED = 1; MF_DISABLED = 2; MF_UNCHECKED = 0; MF_CHECKED = 8; MF_USECHECKBITMAPS = $200; MF_STRING = 0; MF_BITMAP = 4; MF_OWNERDRAW = $100; MF_POPUP = $10; MF_MENUBARBREAK = $20; MF_MENUBREAK = $40; MF_UNHILITE = 0; MF_HILITE = $80; MF_DEFAULT = $1000; MF_SYSMENU = $2000; MF_HELP = $4000; MF_RIGHTJUSTIFY = $4000;