Навигация:
<< >> Оглавление Указатель

Приложения

Приложение А. Функции, константы и структуры RDS

А.5. Сервисные функции и макросы RDS

А.5.18. Системное меню и контекстное меню блока

А.5.18.5. rdsExecMenuItem – имитировать выбор пункта меню

Функция rdsExecMenuItem имитирует выбор пункта меню блока пользователем. Модель блока при этом вызывается для реакции на событие RDS_BFM_MENUFUNCTION.

  void  rdsExecMenuItem(
     Block,    // Идентификатор блока
    int MenuFunc,         // Номер функции пункта меню
    int MenuData          // Данные пункта меню
  );

Тип указателя на эту функцию

RDS_VBhII

Параметры

Block (RDS_BHANDLE)
Уникальный идентификатор блока, для которого имитируется выбор пункта меню.
MenuFunc (int)
Номер функции пункта меню – это число RDS копирует в поле Function структуры RDS_MENUFUNCDATA без какой-либо обработки.
MenuData (int)
Данные пункта меню –это число RDS копирует в поле MenuData структуры RDS_MENUFUNCDATA без какой-либо обработки.

Примечания

Эта функция вызывает модель блока Block для реакции на событие RDS_BFM_MENUFUNCTION, как будто пользователь выбрал постоянный или временный пункт меню, с которым связана пара целых чисел (MenuFunc,MenuData). Модель вызванного блока не может отличить вызов из-за того, что пользователь действительно выбрал пункт меню, от вызова из-за функции rdsExecMenuItem.

Вызов модели блока всегда будет производиться в главном потоке RDS, даже если rdsExecMenuItem была вызвана в потоке расчета (в этом случае вызов будет отложен до завершения текущего такта).

Для успешной работы этой функции не обязательно, чтобы пункт меню, с которым связана пара чисел (MenuFunc,MenuData), существовал в действительности. Это позволяет модели блока, например, использовать rdsExecMenuItem для вызова самой себя в главном потоке из потока расчета. Допустим, существует некая функция DoSomething(), которую можно вызывать только в главном потоке RDS. Если ее нужно вызвать из реакции на такт расчета RDS_BFM_MODEL, этот вызов можно организовать так (приведен только внутренний оператор switch функции модели блока):

  switch(CallMode)
    { case :
        if(какое-то условие)
          rdsExecMenuItem(BlockData->Block,10000,0);
        break;
      case :
        if((()ExtParam)->Function==10000)
           DoSomething();
        break;
    }

В данном случае в такте расчета имитируется выбор пункта меню с номером функции 10000, а в реакции на этот пункт меню (которая всегда выполняется в главном потоке RDS) вызывается функция DoSomething().

См. также

RDS_BFM_MENUFUNCTION, RDS_MENUFUNCDATA.


<< >> Оглавление Указатель