Форум пользователей Visio
http://visio.getbb.ru/

Дроп мастер-шейпа
http://visio.getbb.ru/viewtopic.php?f=5&t=1465
Страница 1 из 1

Автор:  is308 [ 28 май 2019, 14:25 ]
Заголовок сообщения:  Дроп мастер-шейпа

Уважаемые форумчане.
Подскажите, пожалуйста, что нужно прописать в EventDrop мастер-шейпа, чтобы при его дропе на страницу в ShapeSheet этой самой страницы:
1. добавился раздел Actions
2. в Action.Row_1 записалось некоторое "XYZ"

Заранее спасибо

Автор:  Surrogate [ 28 май 2019, 14:47 ]
Заголовок сообщения:  Re: Дроп мастер-шейпа

is308 писал(а):
1. добавился раздел Actions
2. в Action.Row_1 записалось некоторое "XYZ"
формула такая

Events

EventDrop

SETF(GetRef(ThePage!Actions.Row_1.Action),"Docmd(1312)")+SETF(GetRef(ThePage!Actions.Row_1),"XYZ")

 

самое главное, чтобы в мастере на странице была секция Actions и строка Actions.Row_1 !

Автор:  Tumanov [ 28 май 2019, 15:38 ]
Заголовок сообщения:  Re: Дроп мастер-шейпа

То есть предполагается, что секция и строка будут скопированы (унаследованы) из мастер-шейпа, а значение XYZ прописано формулой.
НО!
Возникает вопрос - насколько надежны такие действия? Легко представить десяток причин, которые могут помешать наступлению предполагаемого результата. Вот и будет это работать "почти всегда".
Лично я в подобной ситуации, нисколько не сомневаясь, написал бы макрос. И вызвал бы его в EventDrop.

Автор:  is308 [ 30 май 2019, 10:14 ]
Заголовок сообщения:  Re: Дроп мастер-шейпа

Tumanov писал(а):
Лично я в подобной ситуации, нисколько не сомневаясь, написал бы макрос. И вызвал бы его в EventDrop.


Вас не затруднит накидать подобный макрос или выложить готовый vss с мастер-шейпом? Никогда не доводилось сталкиваться с макросами для мастер-шейпов.
Заранее спасибо

Автор:  Tumanov [ 30 май 2019, 11:54 ]
Заголовок сообщения:  Re: Дроп мастер-шейпа

Цитата:
Никогда не доводилось сталкиваться с макросами для мастер-шейпов.

Не совсем точная формулировка...
Макрос сажается в трафарет. А вызывается при дропе мастер-шейпа из этого трафарета на страницу документа.
В качестве примера такого трафарета можно взять Sorting.vss
Там много всего, но нас интересует только одна процедура StartForm
В трафарете имеется единственный шейп, при дропе которого открывается форма. В шейпе прописано EventDrop=CALLTHIS("mSort.StartForm","Sorting")
то есть вызывается как раз эта процедура.
Естественно, для добавления секции на страницу процедуру нужно будет заменить. Например, на такую
Код:
Sub ttt()
    Dim pg As Visio.Page
    Set pg = ActivePage
    pg.PageSheet.AddSection visSectionAction
    pg.PageSheet.AddRow visSectionAction, visRowLast, visTagDefault
    pg.PageSheet.CellsSRC(visSectionAction, 0, visActionMenu).FormulaU = Chr(34) & "NewAction" & Chr(34)
    pg.PageSheet.CellsSRC(visSectionAction, 0, visActionAction).FormulaU = "DoCmd(1312)"
End Sub

Это опять же только пример. Полезно будет добавить проверку того, что секция уже существует (иначе будет ошибка), проверку количества строк в секции и т.д. Короче, включить все необходимые проверки, чтобы операция выполнялась надежно или хотя бы сообщалось об ошибках.

Автор:  Tumanov [ 30 май 2019, 11:59 ]
Заголовок сообщения:  Re: Дроп мастер-шейпа

Фокус не удался :)
Выложил защищенный вариант. Для просмотра кода лучше использовать вот этот. Он без пароля.

Вложения:
Sorting.vss [30 Кб]
Скачиваний: 12

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/