Меню

    Здесь рассмотрены несколько основных функций для работы с меню. Но так как Delphi предоставляет достаточно удобные средства для работы с меню, здесь не рассматриваются вопросы о РЕАКЦИИ программы на выбор пунктов ГЛАВНОГО меню, зато рассматривается обработка сообщений от меню системного.

Описатель меню HMENU — это уникальный номер меню в системе. В файле windows.pas тип HMENU определен так:
type HMENU = Integer

Функция AppendMenu

function AppendMenu(hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: PChar): BOOL

Все параметры как в функции InsertMenu.
Наверх


Функция CheckMenuItem

function CheckMenuItem(hMenu: HMENU; uIDCheckItem, uCheck: UINT): DWORD

Помечает пункт меню или снимает пометку (пометка в виде галочки).

Menu
Описатель меню.
uIDCheckItem
ID пункта меню.
uCheck
Комбинация флагов MF_CHECKED, MF_UNCHECKED, MF_BYCOMMAND, MF_BYPOSITION.

Пример:
...
begin
CheckMenuItem(Menu,3,mf_byposition or MF_CHECKED);//пометка 3-го пункта меню Menu

CheckMenuItem(Menu,3,mf_byposition or MF_UNCHECKED);//снятие пометки с 3-го пункта меню Menu

end
...
Наверх

Функция CheckMenuRadioItem

function CheckMenuRadioItem(hMenu: HMENU; First, Last, Check, Flags: UINT): BOOL

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

hMenu
Описатель меню.
First
Номер первого пункта меню из группы.
Last
Номер последнего пункта меню из группы.
Check
Номер помечаемого элемента (при этом пометка у остальных пунктов из группы пометка сбрасывается).
Flags
Должен — MF_BYPOSITION.

Наверх


Функция CreateMenu

function CreateMenu: HMENU

Создает новый пустой описатель меню.

Наверх


Функция CreatePopupMenu

function CreatePopupMenu: HMENU

Создает описатель всплывающего меню.
ВНИМАНИЕ:
ВСПЛЫВАЮЩЕЕ [POPUP] МЕНЮ В ПОНИМАНИИ WINDOWS И Delphi РАЗНЫЕ ВЕЩИ.
В Windows popup меню — это меню которое связано с другим пунктом меню (который отмечается треугольничком справа от текста пункта) и появляется только в то случае, когда пользователь выбрал этот самый пункт с треугльничком (другими словами popup меню в Windows — это подменю).

В Delphi popup меню — Это меню, которое может «Всплывать» в любой точке экрана
Наверх


Функция DestroyMenu

function DestroyMenu(hMenu: HMENU): BOOL

Уничтожает описатель меню.

hMenu
Уничтожаемого описатель меню.

Наверх


Функция DrawMenuBar

function DrawMenuBar(hWnd: HWND): BOOL

Перерисовывает строку меню окна.

hWnd
Описатель окна.


Функция EnableMenuItem

function EnableMenuItem(hMenu: HMENU; uIDEnableItem, uEnable: UINT): BOOL

Делает пункт меню доступным или недоступным.

hMenu
Описатель меню.
uIDEnableItem
ID пункта меню.
uEnable
Комбинация флагов MF_BYPOSITION, MF_BYCOMMAND, MF_GRAYED, MF_ENABLED.
Пример:
...
Begin
EnableMenuItem(Menu,3,mf_byposition or) MF_GRAYED);
{
   Делает недоступным(закрашивает серым цветом (флаг MF_GRAYED)) пункт меню 
   номер 3(флаг MF_BYPOSITION).
   Если бы вместо mf_grayed было mf_enabled, тогда этот пункт меню 
   сделался бы доступным.
}
End
...
Наверх

Функция GetMenu

function GetMenu(hWnd: HWND): HMENU

Возвращает описатель меню или нуль (если у окна нет меню).

hWnd
Описатель того окна, описатель меню которого Вы хотите получить.

Наверх


Функция GetMenuItemCount

function GetMenuItemCount(hMenu: HMENU): Integer

Возвращает количиство пунктов меню hMenu.
Наверх


Функция GetSystemMenu

function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU

Возвращает описатель системного меню окна.

hWnd
Описатель окна, системное меню которого необходимо прлучить.
bRevert
Булевское значение:
True
Будет восстановлен первоначальный вид системного меню. Все изменения полученного описателя меню будут проигнорированы. Применяется для отмены изменений в системном меню.
False
Изменяя полученный описатель, можно менять само системное меню.
Наверх

Функция InsertMenu

function InsertMenu(hMenu: HMENU; uPosition, uFlags, uIDNewItem: UINT; lpNewItem: PChar): BOOL

Вствляет пункт меню в определенную позицию в меню.

hMenu
Описатель меню
uPosition
Позиция нового пункта
uFlags
Набор флагов, определяющий каким будет вставлен в меню новый пункт(доступным, недоступным, помеченным и т.д.)
uIDNewItem
ID нового пункта меню.
lpNewItem
Текст пункта меню.
Наверх

Функция SetMenu

function SetMenu(hWnd: HWND; hMenu: HMENU): BOOL

Устанавливает ГЛАВНОЕ новое меню у заданного окна. Возвращает True, если всё прошло удачно. После выполнения этой функции строку меню нужно перерисовать функцией DrawMenuBar

hWnd
Описатель окна.
hMenu
Описатель меню, которым Вы хотите заменить меню окна, заданного описателем hWnd.
Пример:
...
{...где-то здесь получен описатель hM нового меню...}
//Хотим заменить меню окна с описателем wnd
SetMenu(wnd,hM);
DrawMenuBar;
...
Наверх

Список всех MF_ констант

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;
Хостинг от uCoz