All Forums
 Категория Visio
 Форум Вопросы и ответы
 Изменение содержимого в ShapeSheet и QueryCancelUn
Author Previous Topic Topic Next Topic  

krys

55 Posts

Posted - 06/06/2008 :  16:53:12
Добрый день.
У меня такой вопрос:
можно ли во время появления события QueryCancelUngroup
изменять содержимое ячеек в ShapeSheet для елементов
находящихся в обрабатываемой группе?
(событие отлавливается и вызывается соответствующая функция)

Спасибо.

Tumanov

Russia
1198 Posts

Posted - 06/06/2008 :  17:02:04
То есть практически у Вас все работает, а хочется узнать насколько это надежно? Так что ли?
Go to Top of Page

krys

55 Posts

Posted - 06/06/2008 :  17:19:12
Практически не работает :(.
То есть внутри функции я сперва определяю
Шейп-Группу содержащий интересующие меня элементы и через
его Collection обращаюсь к отдельным Шейпам.
С помощъю свойства FormulaForceU я пытаюсь
изменить содержимое ячейки в разделе User.
операция присвоения значения не срабатывает.

Что меня смущает, что ранее я внутри той же самой функции
делал нечто подобное с другими элементами и операция выполнялась успешно.
(Сейчас тоже работает, правда там я меняю значение в разделе CustomProperties)

Edited by - krys on 06/06/2008 17:29:53
Go to Top of Page

zhuravsky

Russia
115 Posts

Posted - 06/07/2008 :  06:13:27
Не может ли быть, что вы пытаетесь присвоить в ячейку формулу, а формула содержит ошибку и поэтому присвоения не происходит?
Go to Top of Page

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
Go to Top of Page

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.

то я и не могу ничего записать в ячейки.
Удивительно только что это мне ранее удалось.
(...или что то не так :( )
Go to Top of Page

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
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 06/09/2008 :  16:13:39
Ни на первый, ни на последний вопрос однозначно и с полной уверенностью я ответить не могу. Поэтому ввел бы какой-нибудь флаг-признак и действовал через него. Если, конечно, есть такая возможность.
Go to Top of Page

krys

55 Posts

Posted - 06/09/2008 :  16:42:02
Под вспомогательной переменной я и понимаю флаг-признак.
...В любом случае большое всем спасибо за ответы.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)