Application.GetMenu

table Application.GetMenu ( )
Примеры

Описание

Возвращает численно проиндексированную таблицу, содержащую текущую структуру меню панели меню приложения.

Параметры

Нет.

Возврат

ResultVariable

(таблица) Численно индексированная таблица таблиц пунктов меню, или значение nil, если произошла ошибка. Каждая позиция таблицы будет содержать следующие ключи:

KEY
КЛЮЧ
TYPE
ТИП
DESCRIPTION
ОПИСАНИЕ
IDчислоЧисловой идентификатор (ID) пункта меню.

Примечание: Если пункт меню содержит любые пункты подменю, его ID будет -1. Если пункт меню - разделитель, его ID будет 0.
TextстрокаТекст пункта меню. Отметим, что разделителем текста (Text) пунктов принято "---".
IconIDчислоНачинающийся с 0 указатель (индекс) иконки из Image List (список картинок) указывающий на Menu Bar (строку меню) для пункта меню.
EnabledлогическийРазрешен ли пункт меню.
CheckedлогическийОтмечен ли пункт меню.
SubMenuтаблицаЧисленно индексированная таблица таблиц пунктов меню, если дочерние элементы есть, или значение nil, если дочерних элементов нет.

Можно использовать Application.GetLastError для определения случился ли отказ в работе этого действия и почему.

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

Примеры

Пример 1

-- Output all top level menu items:
-- Вывод всех пунктов меню верхнего уровня:
local strMenuData = "";
-- Store the contents of the menu in a table
-- Сохранение содержимого меню в таблице
tblMenu = Application.GetMenu();
-- Check that the table exists
-- Убедимся, что таблица существует
if (tblMenu) then
  local nNumItems = Table.Count(tblMenu);
  -- Step through the table row by row
  -- Проход по таблице по строкам
  for index = 1, nNumItems do
      local tblItemInfo = tblMenu[index];
      if (tblItemInfo) then
          -- Add the text to the string
          -- Добавляем текст к строке
          strMenuData = strMenuData .. tblItemInfo.Text .. "\r\n";
      end
  end
  -- Output the created string to the user
  -- Вывод созданной строки пользователю
  Dialog.Message("Top Level Menu Items", strMenuData);
end
Вывод всех пунктов меню верхнего уровня пользователь в диалоговом окне сообщения.

Пример 2

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%  Name:    OutputMenu (tMenuToOutput, nLevelCount = 0, sMenuString = "");       %
--%  Values:  tMenuToOutput: REQUIRED - the menu table generated from              %
--%           Application.GetMenu                                                  %
--%           nLevelCount: Optional (default to 0), the indent the current item    %
--%           should have in the output.                                           %
--%           sMenuString: Optional (default to ""), a string containing           %
--%           the menu items.                                                      %
--%  Returns: A string containing the menu items ready for output.                 %
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%  Имя:      OutputMenu (tMenuToOutput, nLevelCount = 0, sMenuString = "");      %
--%  Значения: tMenuToOutput: ТРЕБУЕТСЯ - таблица меню сгенерирована               %
--%            Application.GetMenu                                                 %
--%            nLevelCount: Необязательно (по умолчанию равна 0), отступ            %
--%            текущего пункта, что будет на выходе.                               %
--%            sMenuString: Необязательно (по умолчанию равна ""), строка,         %
--%            содержащая пункты меню.                                             %
--%  Возврат:  Строка, содержащая пункты меню готовые для вывода.                  %
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function OutputMenu (tMenuToOutput, nLevelCount, sMenuString)
  -- Since we don't want to make nLevelCount required (for the first call),
  -- we have to initialize it if it is not passed to the function
  -- Поскольку нежелательно затребовать nLevelCount (для первого вызова),
  -- инициализаруем её если она не передается функции
  if not nLevelCount then
     nLevelCount = 0;
  end
  -- sMenuString is not a required variable (for the first call),
  -- therefore we must initialize it if it was not passed to the function.
  -- sMenuString не обязательная переменная (для первого вызова),
  -- поэтому нужно инициализировать её, если она не передается функции.
  if not sMenuString then
     sMenuString = "";
  end
  -- Menu table is numerically indexed, step through for each node
  -- Таблица меню численно проиндексирована, step through for each node
  for nIndex, tMenuItem in pairs(tMenuToOutput) do
     -- Add the current menu item to the string to return, whether it has a sub menu or not
     -- Добавляем пункт текущего меню в строку для возврата, имеет ли она подменю или нет
     sMenuString = sMenuString .. String.Repeat(" ", nLevelCount * 4) .. tMenuItem.Text .. " (ID: " .. tMenuItem.ID .. ")" .. "\r\n";
     -- Check if a sub menu exists at the current menu's location
     -- Проверим есть ли подменю в позиции текущего меню
     if type(tMenuItem.SubMenu) == "table" and tMenuItem.ID == -1 then
        -- A sub menu exists. Recursively call this function to include the sub menu.
        -- Increasing the level count by 1 controls the indent that the item will have in the output.
        -- Подменю существует. Рекурсивный вызов этой функции для включения подменю.
        -- Увеличение счетчика уровня на 1 управляет отступом, что пункт будет иметь на выходе.
        sMenuString = OutputMenu (tMenuItem.SubMenu, nLevelCount + 1, sMenuString);
     end
  end
  -- Return the menu string
  -- Возвращаем строку меню
  return sMenuString;
end
-- Get the menu structure and store in a table
-- Получаем структуру меню и сохраняем в таблицу
tMenu = Application.GetMenu();
-- Set the title and message for the Dialog.Message box
-- Устанавливаем заголовок и сообщение для окна Dialog.Message
sTitle = "Current Menu Structure";
sMessage = OutputMenu(tMenu);
-- Display a Dialog.Message box to the user
-- Показываем окно Dialog.Message пользователю
Dialog.Message(sTitle, sMessage);
Вывод всей структуры меню пользователю в диалоговом окне сообщения. Этот пример использует расширенное выполнение функции для рекурсивного прохода через меню.
Смотрите также: Связанные действия