Класс FarMenu

Класс FarMenu предназначен для показа меню. Этот класс представляет собой обертку вокруг функции Menu из FAR API.

Для того, чтобы вывести меню на экран и дать пользователю возможность выбрать один из пунктов, необходимо выполнить следующую последовательность действий:

  1. Создать объект FarMenu, передав в конструктор строку-заголовок меню, а также опционально флаги и тему помощи, ассоциированную с меню;
  2. При необходимости задать дополнительные параметры меню (расположение на экране, максимальную высоту, нижний заголовок, дополнительные клавиши для выхода из меню), вызвав соответствующие методы класса FarMenu;
  3. Добавить в меню необходимые пункты;
  4. Вызвать метод Show(), возвращающий номер выбранного пункта;
  5. При необходимости проанализировать код клавиши, использованной для выхода из меню (BreakCode).

Методы

FarMenu (const char *TitleText, unsigned int Flags=FMENU_WRAPMODE, const char *HelpTopic=NULL);

FarMenu (int TitleLngIndex, unsigned int Flags=FMENU_WRAPMODE, const char *HelpTopic=NULL);

Конструктор FarMenu существует в двух вариантах, получающих строку заголовка в виде const char * или номера строки в LNG. Флаги, передаваемые в конструктор FarMenu, соответствуют флагам функции Menu. По умолчанию установлен флаг FMENU_WRAPMODE, обеспечивающий переход курсора к первому или последнему элементу меню при перемещении его вниз с последнего элемента или вверх с первого, соответственно.

void SetLocation (int X, int Y);

Метод SetLocation позволяет задать координаты на экране левого верхнего угла меню. Если этот метод не был вызван, координаты меню будут определены автоматически.

void SetMaxHeight (int MaxHeight);

Метод SetMaxHeight позволяет задать максимальную высоту меню в строках. Если этот метод не был вызван, меню будет иметь максимально возможную высоту.

void SetBottomLine (const FarString &Text);

void SetBottomLine (int LngIndex);

Метод SetBottomLine позволяет задать нижний заголовок меню (строку, которая выводится на нижней рамке и может, например, содержать подсказку по использованию меню). Текст заголовка может быть задан как в виде строки FarString, так и в виде номера строки в LNG. Если этот метод не был вызван, нижний заголовок не будет выводиться.

void SetBreakKeys (int *BreakKeys);

void SetBreakKeys (int aFirstKey, ...);

Метод SetBreakKeys позволяет задать набор кодов клавиш (VK_*), которые могут быть использованы для закрытия меню, помимо стандартных клавиш (Enter, Esc или F10). Старшее слово элемента массива может быть или 0, или комбинацией флагов PKF_CONTROL, PKF_ALT и PKF_SHIFT для описания комбинаций клавиш.

Первый вариант метода позволяет вам передать указатель на уже существующий массив кодов:

int MenuBreakKeys[] = { VK_F4, VK_INSERT, VK_DELETE, 0 };
menu.SetBreakKeys (MenuBreakKeys);

Второй вариант позволяет вам перечислить коды непосредственно при вызове метода:

menu.SetBreakKeys (VK_F4, VK_INSERT, VK_DELETE, 0);

И в том, и в другом случае список кодов обязательно должен завершаться нулевым байтом.

int AddItem (const char *Text, bool Selected=false, int Checked=0);

int AddItem (int LngIndex, bool Selected=false, int Checked=0);

Метод AddItem позволяет добавить пункт в меню. При этом текст пункта может быть задан как в виде const char *, так и в виде номера строки в LNG. Если установлен флаг Selected, добавляемый пункт меню будет текущим при показе меню.  Если параметр Checked не равен нулю, перед текстом отображается метка выбора. Если Checked равно 1, то отображается стандартная метка, если больше 1 - значение Checked используется как символ метки.

Метод AddItem возвращает номер добавленного пункта меню.

int AddSeparator();

Метод AddSeparator добавляет в меню разделительную линию. Метод возвращает номер добавленного пункта меню.

void ClearItems();

Метод ClearItems очищает список пунктов меню, сформированный ранее функциями AddItem и AddSeparator.

void SelectItem (int index);

Метод SelectItem устанавливает выделение на пункт с указанным индексом. Этот пункт будет текущим при показе меню.

int Show();

Метод Show выводит сформированное меню на экран, позволяет пользователю выбрать элемент и возвращает номер выбранного элемента. Если пользователь отменил меню (нажав Esc или F10), возвращаемое значение функции будет равно -1.

int GetBreakCode() const

Метод GetBreakCode возвращает индекс в массиве BreakKeys клавиши, которая была использована для закрытия меню, или -1 в случае, если меню было закрыто одной из стандартных клавиш.