Тема: Обработчик события Object_PropertiesDlgShow

Есть тип объекта, который не имеет атрибутов. При создании такого объекта пользователем через Object_BeforeCreate запрашивается имя, которое вписывается в Description. Показывать окно свойств объекта при создании не нужно - там нечего вводить. Написал в скрипте типа объекта:

Sub Object_PropertiesDlgShow(pObject, pForms, bCancel)
    bCancel = True
End Sub

В справке написано:
  Object_PropertiesDlgShow(pObject, pForms, bCancel) генерируется перед выводом на экран окна свойств объекта.
  bCancel = True отменяет вывод на экран окна свойств объекта.
Окно свойств всё равно отображается. Что я делаю не правильно?..

PS: TDMS 3.0.145

Re: Обработчик события Object_PropertiesDlgShow

У меня все работает. 3.0.146

Re: Обработчик события Object_PropertiesDlgShow

Mishaf пишет:

У меня все работает. 3.0.146

Обновился до 146-й сборки. Не помогло. Сделал обработку события с выводом окошка:

Sub Object_PropertiesDlgShow(Object, Forms, Cancel)
    MsgBox "Событие Object_PropertiesDlgShow вызвано"
    Cancel = True
End Sub

В итоге MsgBox показывается, а после него показывается и окно свойств объекта.

Re: Обработчик события Object_PropertiesDlgShow

Каким образом создается объект ? Скриптом или через интерфейс ?

Re: Обработчик события Object_PropertiesDlgShow

Edhunter пишет:

Каким образом создается объект ? Скриптом или через интерфейс ?

Через интерфейс, пользователем через контекстное меню -> Создать, далее скрипт на объекте:

Use CMD_Lib
Use CMD_Lib_Access
Use CMD_Lib_Structures

Sub Object_BeforeCreate(pObject,pParentObject,bCancel)
    Set NameSlctDlg = ThisApplication.Dialogs.SimpleEditDlg
    NameSlctDlg.Caption = "Введите имя создаваемого раздела"
    NameSlctDlg.Prompt = "Имя:"
    NameSlctDlg.Type = tdmSimpleEditCustom
    If NameSlctDlg.Show Then
        pObject.Description = NameSlctDlg.Text
    Else bCancel = True
    End If
End Sub

Sub Object_PropertiesDlgShow(Object, Forms, Cancel)
    MsgBox "Вызвано событие Object_PropertiesDlgShow"
    Cancel = True
End Sub

Sub Object_Created(pObject,pParentObject)
    ThisApplication.Utility.WaitCursor = True
    Call SetStructure_MailFolderSub(pObject)
    Call CleanRoles(pObject)
    ThisApplication.Utility.WaitCursor = False
End Sub

Re: Обработчик события Object_PropertiesDlgShow

Тоже попробовал это
Cancel = True игнорируется.
Объект создан где-то пол-года назад скриптом.

Re: Обработчик события Object_PropertiesDlgShow

Проблема в параметрах события. Правильное описание события выглядит так:

Sub Object_PropertiesDlgShow(Obj, Cancel, Forms)
End Sub

А у Вас так:

Sub Object_PropertiesDlgShow(Object, Forms, Cancel)
End Sub

Вот только даже правильное описание события вам мало что даст. Если в этом событии прописать отмену, то цепочка создания объекта прервётся, и объект создан не будет. Так что единственное решение которое сейчас мне приходит в голову - это полностью переложить создание этого объекта на команду.

Re: Обработчик события Object_PropertiesDlgShow

Edhunter пишет:

Проблема в параметрах события. Правильное описание события выглядит так:

Sub Object_PropertiesDlgShow(Obj, Cancel, Forms)
         End Sub

А у Вас так:

Sub Object_PropertiesDlgShow(Object, Forms, Cancel)
         End Sub

В хэлпе (в mk:@MSITStore:TDMSAPI.CHM::/API/Out/TDMS~TDMSApplication~ObjectPropertiesDlgShow_EV.html) написано именно так, я потому так и написал  :)

Вот только даже правильное описание события вам мало что даст. Если в этом событии прописать отмену, то цепочка создания объекта прервётся, и объект создан не будет. Так что единственное решение которое сейчас мне приходит в голову - это полностью переложить создание этого объекта на команду.

Опять возвращаясь к хэлпу (та же страничка), что ж там написано напротив bCancel, что True отменяет вывод на экран окна свойства объекта, а не всё создание объекта?  :) А так всё красиво представлялось  :)