Visual Basic |
---|
Public Event ObjectPropertiesDlgShow( _ ByVal pObject As TDMSObject, _ ByRef bCancel As Boolean, _ ByVal pForms As TDMSInputForms _ ) |
- pObject
- Объект, окно свойств которого должно быть показано.
- bCancel
- TRUE отменяет вывод на экран окна свойств объекта.
- pForms
- Коллекция форм (за исключением формы "Все атрибуты"), которые будут показаны в Окне свойств.
Использование обработки события может быть полезным, когда необходимо добавить/удалить формы в Окне свойств или отменить вывод окна на экран по какому-либо условию.
1. Событие является отменяемым: присвоением параметру bCancel значения TRUE можно отменить вывод на экран диалога свойств объекта.
2. Обработчик может быть размещен в скриптах объекта, профиля и/или общесистемном. Если обработчики определены на всех уровнях, то последовательность их вызова такова:
- скрипт объекта;
- скрипт профиля пользователя;
- общесистемный скрипт.
Если на каком-либо уровне событие было отменено (параметру bCancel присвоено значение TRUE), то обработчики события, размещенные на последующих уровнях, вызваны не будут.
3. Схему последовательности генерации событий при редактировании атрибутов объекта в окне свойств см. на рисунке:
4. Событие генерируется перед выводом диалога свойств объекта на экран. Событие не наступает при показе свойств объекта на Панели свойств главного окна приложения. Для того, чтобы событие генерировалось при работе через API (например, при вызове метода EditObjectDlg.Show Метод), должен быть включен вызов объектных событий в Окне свойств базы данных (см. рисунок).
VB Script (Visual Basic) | ![]() |
---|---|
'====================================================================== 'Текст обработчика может быть размещен в скрипте объекта, 'профиля или общесистемном скрипте. Sub Object_PropertiesDlgShow(Obj, Cancel) 'В этот момент можно изменить любые свойства объекта, 'а также отменить вывод окна свойств на экран msg = "Запретить редактирование атрибутов объекта?" RetVal = MsgBox(msg, vbYesNoCancel + vbQuestion, "Открытие окна свойств объекта") If RetVal = vbYes Then 'Мы хотим отключить все элементы управления формы, но через frm.Controls 'этого сделать нельзя - требуется использование спец. переменной ThisForm. 'Временно заменим скрипт формы, сохранив старый; в момент открытия формы, после 'того как элементы управления будут отключены, он будет восстановлен Set frm = Obj.ObjectDef.InputForms(0) Set Dict = ThisApplication.Dictionary 'глобальная переменная, которая будет хранить 'старый скрипт формы Dict("SavedScript") = frm.Script 'Создадим новый скрипт формы Script = "Sub Form_BeforeShow(Form, Obj)" & Chr(13) & _ " For Each ctrl In ThisForm.Controls" & Chr(13) & _ " ctrl.ReadOnly = TRUE" & Chr(13) & _ " Next" & Chr(13) & _ " Set Dict = ThisApplication.Dictionary" & Chr(13) & _ " ThisForm.Script = Dict(""SavedScript"")" & _ Chr(13) & "End Sub" 'Теперь присвоим форме новый скрипт. В момент обработки события Form_BeforeShow 'элементы управления формы будут отключены frm.Script = Script frm.Refresh Exit Sub ElseIf RetVal = vbCancel Then 'Отменить вывод формы на экран Cancel = True Exit Sub Else: 'Просто разрешить открытие окна свойств в обычном режиме Exit Sub End If End Sub '====================================================================== |