Author |
Topic |
|
krys
55 Posts |
Posted - 06/06/2008 : 16:53:12
|
Добрый день. У меня такой вопрос: можно ли во время появления события QueryCancelUngroup изменять содержимое ячеек в ShapeSheet для елементов находящихся в обрабатываемой группе? (событие отлавливается и вызывается соответствующая функция)
Спасибо. |
|
Tumanov
Russia
1198 Posts |
Posted - 06/06/2008 : 17:02:04
|
То есть практически у Вас все работает, а хочется узнать насколько это надежно? Так что ли? |
|
|
krys
55 Posts |
Posted - 06/06/2008 : 17:19:12
|
Практически не работает :(. То есть внутри функции я сперва определяю Шейп-Группу содержащий интересующие меня элементы и через его Collection обращаюсь к отдельным Шейпам. С помощъю свойства FormulaForceU я пытаюсь изменить содержимое ячейки в разделе User. операция присвоения значения не срабатывает.
Что меня смущает, что ранее я внутри той же самой функции делал нечто подобное с другими элементами и операция выполнялась успешно. (Сейчас тоже работает, правда там я меняю значение в разделе CustomProperties)
|
Edited by - krys on 06/06/2008 17:29:53 |
|
|
zhuravsky
Russia
115 Posts |
Posted - 06/07/2008 : 06:13:27
|
Не может ли быть, что вы пытаетесь присвоить в ячейку формулу, а формула содержит ошибку и поэтому присвоения не происходит? |
|
|
Tumanov
Russia
1198 Posts |
Posted - 06/07/2008 : 15:50:18
|
Теории на этот счет не встречал. Попробовал немного исследовать ситуацию практически... Попытки изменить ячейки "Prop.Row_1" и "User.Row_1" в селектированных шейпах вызывают exception в функции QueryCancelUngroup. В то же время читать данные из этих ячеек можно. Блокируется только запись. Пришла в голову мысль - передать данные в другой обработчик и записать их там. Возможное ближайшее событие - UngroupCanceled. Передал. Запись проходит нормально. Естественно, это для случая, когда функция принимает значение True. Если Ungroup разрешается, то вместо UngroupCanceled нужно будет искать другое событие. ----------- В примере работал с группой из трех шейпов. У первого шейпа в группе есть секции User и Prop - в них и записывал. Код примера: Dim WithEvents pg As Visio.Page Dim shFlag As Visio.Shape
Sub ttt() Set pg = ActivePage End Sub
Private Function pg_QueryCancelUngroup(ByVal Selection As IVSelection) As Boolean Dim sh As Visio.Shape Dim sh1 As Visio.Shape Set sh = Selection(1) Set sh1 = sh.Shapes(1) Debug.Print sh1.Cells("Prop.Row_1.Value").Formula Debug.Print sh1.Cells("User.Row_1.Value").Formula Set shFlag = sh1 ' sh1.Cells("Prop.Row_1.Value").Formula = Chr(34) & Now() & Chr(34) ' sh1.Cells("User.Row_1.Value").Formula = Chr(34) & Now() & Chr(34) pg_QueryCancelUngroup = True End Function
Private Sub pg_UngroupCanceled(ByVal Selection As IVSelection) shFlag.Cells("Prop.Row_1.Value").Formula = Chr(34) & Now() & Chr(34) shFlag.Cells("User.Row_1.Value").Formula = Chr(34) & Now() & Chr(34) End Sub |
|
|
krys
55 Posts |
Posted - 06/09/2008 : 08:32:40
|
Если я правильно понял что здесь написано: While a Visio instance is firing a query or cancel event, it will respond to inquiries from client code but will refuse to perform operations. Client code can show forms or message boxes while responding to a query or cancel event.
то я и не могу ничего записать в ячейки. Удивительно только что это мне ранее удалось. (...или что то не так :( ) |
|
|
krys
55 Posts |
Posted - 06/09/2008 : 10:06:42
|
Нужен совет: поскольку после UngroupCancelUngroup вызывается BeforeSelectionDelete, я хочу обработать элементы здесь. Могу ли я однозначно при помощи средств Визио определить- является это событие следствием "разгруппировки" или простого удаления одного или нескольких элементов из чертежа? Нужно ли мне в моём проэкте вводить вспомогательные переменные, которые например будут принимать значение true если вызывалось событие UngroupCancelUngroup, и позднее при BeforeSelectionDelete проверять это значение. Или я могу такую проверку произвести другим способом.
Когда может быть BeforeSelectionDelete вызвано еще кроме как после QueryCancelSelectionDelete,UngroupCancelUngroup, QueryCancelConvertToGroup ? |
Edited by - krys on 06/09/2008 10:28:55 |
|
|
Tumanov
Russia
1198 Posts |
Posted - 06/09/2008 : 16:13:39
|
Ни на первый, ни на последний вопрос однозначно и с полной уверенностью я ответить не могу. Поэтому ввел бы какой-нибудь флаг-признак и действовал через него. Если, конечно, есть такая возможность. |
|
|
krys
55 Posts |
Posted - 06/09/2008 : 16:42:02
|
Под вспомогательной переменной я и понимаю флаг-признак. ...В любом случае большое всем спасибо за ответы. |
|
|
|
Topic |
|