Visual Basic |
---|
Public Event ContextMenuBeforeShow( _ ByVal pCommands As TDMSCommands, _ ByVal pObject As TDMSObject, _ ByRef bCancel As Boolean _ ) |
- pCommands
- Коллекция команд, назначенных объекту (они будут показаны в верхней части контекстного меню).
- pObject
- Объект, чье контекстное меню будет выведено на экран.
- bCancel
- TRUE - отменить вывод контекстного меню на экран.
1. Событие является отменяемым: если параметру bCancel присвоено значение TRUE, контекстное меню не будет показано на экране (однако события ContextMenuItemAdd в этом случае все равно наступают).
2. Событие не может быть сгенерировано программно - в API TDMS нет метода, позволяющего показать контекстное меню объекта.
3. Обработчик может быть размещен в скриптах объекта, профиля и/или общесистемном. Если обработчики определены на всех уровнях, то последовательность их вызова такова:
- скрипт объекта;
- скрипт профиля пользователя;
- общесистемный скрипт.
Если на каком-либо уровне событие было отменено (параметру bCancel присвоено значение TRUE), то обработчики события, размещенные на последующих уровнях, вызваны не будут.
4. Событие генерируется при вызове контекстного меню:
-
на любом объекте (в Дереве объектов или на Панели состава);
-
на узлах Desktop и Root Дерева объектов;
-
кнопкой "Команды" на панели инструментов в Окне свойств объекта.
5. Желательно не использовать в обработчике события функции вывода диалогов типа MsgBox(). При этом происходит переключение фокуса на окно диалога, и дальнейшее поведение объекта может быть некорректным (могут не выполняться некоторые команды контекстного меню и т.п.)
6. Схему последовательности генерации событий при вызове контекстного меню на объекте в Дереве объектов см. на рисунке:
VB Script (Visual Basic) | ![]() |
---|---|
'============================================================================= 'Текст обработчика может быть размещен в скрипте команды, профиля или 'общесистемном скрипте. Sub ContextMenu_BeforeShow(Commands, Obj, Cancel) RetVal = MsgBox("В контекстном меню объекта """ & Obj.Description & _ """ содержится " & Commands.Count & " пользовательских команд."_ & Chr(13) & "Вывести меню на экран?", vbQuestion & vbYesNo, _ "Информация о контекстном меню объекта") If RetVal <> vbYes Then Cancel = TRUE End If End Sub '============================================================================= |