Функции для работы с меню


Спасибо Сергею Столярову за предоставление материалов
Описатель меню HMENU - это уникальный номер меню в системе. В файле windows.pas тип HMENU определен так:
type HMENU = Integer; но можно напрямую объявлять переменные такого типа.

Функция GetMenu

function GetMenu(hWnd: HWND): HMENU;
Возвращает описатель меню или нуль (если у окна нет меню).
hWnd
Описатель того окна, описатель меню которого Вы хотите получить.


Функция SetMenu

function SetMenu(hWnd: HWND; hMenu: HMENU): BOOL;
Устанавливает ГЛАВНОЕ новое меню у заданного окна. Возвращает True, если всё прошло удачно. После выполнения этой функции строку меню нужно перерисовать функцией DrawMenuBar
hWnd
Описатель окна.
hMenu
Описатель меню, которым Вы хотите заменить меню окна, заданного описателем hWnd.

Пример:
...
{...где-то здесь получен описатель hM нового меню...}
//Хотим заменить меню формы на hM
SetMenu(Form1.Handle,hM);
DrawMenuBar;
...


Функция DrawMenuBar

function DrawMenuBar(hWnd: HWND): BOOL;
Перерисовывает строку меню окна.
hWnd
Описатель окна.


Функция GetSystemMenu

function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU;
Возвращает описатель системного меню окна.
hWnd
Описатель окна, системное меню которого необходимо прлучить.
bRevert
Булевское значение:
True
Будет восстановлен первоначальный вид системного меню. Все изменения полученного описателя меню будут проигнорированы. Применяется для отмены изменений в системном меню.
False
Изменяя полученный описатель, можно менять само системное меню.
Пример применения в Этом Проекте


Функция CreateMenu

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




Функция CreatePopupMenu

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

В Delphi popup меню - Это меню, которое может "Всплывать" в любой точке экрана



Функция DestroyMenu

function DestroyMenu(hMenu: HMENU): BOOL;
Уничтожает описатель меню.
hMenu
Уничтожаемого описатель меню.



Функция GetMenuItemCount

function GetMenuItemCount(hMenu: HMENU): Integer;
Возвращает количиство пунктов меню hMenu.


Функция CheckMenuItem

function CheckMenuItem(hMenu: HMENU; uIDCheckItem, uCheck: UINT): DWORD;
Помечает пункт меню или снимает пометку (пометка в виде галочки).
hMenu
Описатель меню.
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.


Функция 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
...


Функция InsertMenu

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


Функция AppendMenu

function AppendMenu(hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: PChar): BOOL;
Все параметры как в функции InsertMenu.










Список всех 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