Visual Basic |
---|
Public Event ContextMenuItemAdd( _ ByVal cmdID As TDMSCmdEnum, _ ByVal menuObject As Variant, _ ByVal pCurrentObject As TDMSObject, _ ByRef bCancel As Boolean _ ) |
- cmdID
Идентификатор группы команд/подменю/команды меню.Значение Описание tdmCmdAddCopy tdmCmdAddDesktop tdmCmdAddLink tdmCmdAddQuery tdmCmdCanceled tdmCmdCommand tdmCmdComments tdmCmdCopy tdmCmdCreate tdmCmdCreateMessage tdmCmdCreateMsgAttach tdmCmdCreateQuery tdmCmdCreateVersion tdmCmdDuplicate tdmCmdEMailMenu tdmCmdEventsObject tdmCmdFindMessage tdmCmdFindUser tdmCmdLocateTree tdmCmdMoveDown tdmCmdMoveQuery tdmCmdMoveUp tdmCmdObjectMove tdmCmdPaste tdmCmdPermissions tdmCmdProperties tdmCmdQueryExtended tdmCmdRemove tdmCmdSendDesktop tdmCmdSetSign tdmCmdSetSignNew tdmCmdSignMenu tdmCmdUpdate - menuObject
- Ссылка на API-объект, в зависимости от значения cmdID:
- TDMSCommand - для команд группы tdmCmdCommand. Nothing, если группа пустая (данному типу объекта ни одной команды не назначено).
- TDMSObjectDef - для подменю tdmCmdCreate, tdmCmdAddCopy, tdmCmdAddLink, tdmCmdFind. Nothing, если подменю пустое (объект не может иметь состава).
- TDMSSignDef - для подменю tdmCmdSetSign, tdmCmdSetSignNew. Nothing, если подменю пустое (на объекте нет шаблонов подписей/ подписи не назначены типу объекта).
- Nothing - для остальных.
- pCurrentObject
- Ссылка на объект, которому принадлежит контекстное меню.
- bCancel
- TRUE - не показывать команду в меню (подменю).
2. Событие не может быть сгенерировано программно - в API TDMS нет метода, позволяющего показать контекстное меню объекта.
3. Обработчик может быть размещен в скриптах объекта, профиля и/или общесистемном. Если обработчики определены на всех уровнях, то последовательность их вызова такова:
- скрипт объекта;
- скрипт профиля пользователя;
- общесистемный скрипт.
Если на каком-либо уровне событие было отменено (параметру bCancel присвоено значение TRUE), то обработчики события, размещенные на последующих уровнях, вызваны не будут.
4. Событие генерируется при вызове контекстного меню:
-
на любом объекте в Дереве объектов или на Панели состава;
-
на узлах Desktop и Root Дерева объектов;
-
кнопкой "Команды" на панели инструментов в Окне свойств объекта.
5. Желательно не использовать в обработчике события функции вывода диалогов типа MsgBox(). При этом происходит переключение фокуса на окно диалога, и дальнейшее поведение объекта может быть некорректным (могут не выполняться некоторые команды контекстного меню и т.п.)
6. Схему последовательности генерации событий при вызове контекстного меню на объекте в Дереве объектов см. на рисунке:
7. Событие генерируется даже в том случае, когда вывод самого контекстного меню на экран отменен (параметру bCancel в обработчике ContextMenu_BeforeShow() присвоено значение TRUE).
VB Script (Visual Basic) | ![]() |
---|---|
'==================================================== 'Текст обработчика может быть размещен в скрипте формы, профиля или 'общесистемном скрипте. Sub ContextMenu_ItemAdd(cmdId, MenuObject, Obj, bCancel) 'Если есть API-объект, с которым связана команда меню - показать его описание, 'иначе отменить добавление элемента в меню If Not (MenuObject Is Nothing) Then MsgBox TypeName(MenuObject) & ": " & MenuObject.Description Else bCancel = True End If End Sub '==================================================== |