Функции для работы с меню
Спасибо Сергею Столярову за предоставление материалов
Описатель меню HMENU - это уникальный номер меню в системе. В файле windows.pas тип HMENU определен так:
type HMENU = Integer; но можно напрямую объявлять переменные такого типа.
function GetMenu(hWnd: HWND): HMENU;
Возвращает описатель меню или нуль (если у окна нет меню).
- hWnd
- Описатель того окна, описатель меню которого Вы хотите получить.
function SetMenu(hWnd: HWND; hMenu: HMENU): BOOL;
Устанавливает ГЛАВНОЕ новое меню у заданного окна. Возвращает True, если всё прошло удачно. После выполнения этой функции строку меню нужно перерисовать функцией DrawMenuBar
- hWnd
- Описатель окна.
- hMenu
- Описатель меню, которым Вы хотите заменить меню окна, заданного описателем hWnd.
Пример:
...
{...где-то здесь получен описатель hM нового меню...}
//Хотим заменить меню формы на hM
SetMenu(Form1.Handle,hM);
DrawMenuBar;
...
function DrawMenuBar(hWnd: HWND): BOOL;
Перерисовывает строку меню окна.
- hWnd
- Описатель окна.
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU;
Возвращает описатель системного меню окна.
- hWnd
- Описатель окна, системное меню которого необходимо прлучить.
- bRevert
- Булевское значение:
- True
- Будет восстановлен первоначальный вид системного меню. Все изменения полученного описателя меню будут проигнорированы. Применяется для отмены изменений в системном меню.
- False
- Изменяя полученный описатель, можно менять само системное меню.
Пример применения в Этом Проекте
function CreateMenu: HMENU;
Создает новый пустой описатель меню.
function CreatePopupMenu: HMENU;
Создает описатель всплывающего меню.
ВНИМАНИЕ:
ВСПЛЫВАЮЩЕЕ [POPUP] МЕНЮ В ПОНИМАНИИ WINDOWS И Delphi РАЗНЫЕ ВЕЩИ.
В Windows popup меню - это меню которое связано
с другим пунктом меню (который отмечается треугольничком
справа от текста пункта) и появляется только в то случае, когда пользователь выбрал этот самый
пункт с треугльничком (другими словами popup меню в Windows - это подменю).
В Delphi popup меню - Это меню, которое может "Всплывать" в любой точке экрана
function DestroyMenu(hMenu: HMENU): BOOL;
Уничтожает описатель меню.
- hMenu
- Уничтожаемого описатель меню.
function GetMenuItemCount(hMenu: HMENU): Integer;
Возвращает количиство пунктов меню hMenu.
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
...
function CheckMenuRadioItem(hMenu: HMENU; First, Last, Check, Flags: UINT): BOOL;
Помечает или снимает пометку пункта меню из группы (Пометка в виде точки, действует как переключатель).
- hMenu
- Описатель меню.
- First
- Номер первого пункта меню из группы.
- Last
- Номер последнего пункта меню из группы.
- Check
- Номер помечаемого элемента (при этом пометка у остальных пунктов из группы пометка сбрасывается).
- Flags
- Должен - mf_byposition.
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
...
function InsertMenu(hMenu: HMENU; uPosition, uFlags, uIDNewItem: UINT; lpNewItem: PChar): BOOL;
Вствляет пункт меню в определенную позицию в меню.
- hMenu
- Описатель меню
- uPosition
- Позиция нового пункта
- uFlags
- Набор флагов, определяющий каким будет вставлен в меню новый пункт(доступным, недоступным, помеченным и т.д.)
- uIDNewItem
- ID нового пункта меню.
- lpNewItem
- Текст пункта меню.
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