Поделиться через


Метод Page.DropManyU (Visio)

Создает один или несколько новых объектов Shape на странице, в master или в группе. Он возвращает массив идентификаторов объектов Shape , которые он создает.

Синтаксис

выражение. DropManyU( _ObjectsToInstance()_ , _xyArray()_ , _IDArray()_ )

выражение Переменная, представляющая объект Page .

Параметры

Имя Обязательный или необязательный Тип данных Описание
ObjectsToInstance() Обязательный Variant Определяет образцы или другие объекты, из которых следует создавать фигуры по их универсальным именам.
xyArray() Обязательный Double Массив чередующихся значений x и y , определяющих позиции для новых фигур.
IDArray() Обязательный Integer Параметр Out. Массив, возвращающий идентификаторы созданных фигур.

Возвращаемое значение

Целое число

Замечания

Использование метода DropManyU аналогично методу Drop объекта Page, Master или Shape, за исключением того, что вы можете использовать метод DropManyU для создания нескольких объектов Shape одновременно, а не одного вызова метода. Метод DropManyU создает объекты Shape на странице, в master или в групповой фигуре, к которой он применяется (эта фигура называется целевым объектом в следующем обсуждении).

Чтобы определить, какие master следует удалить, передав метод DropManyUглавный объект, индекс master или имя master. При передаче объекта DropManyU не ограничивается просто удалением master из набора элементов документа, в который он удаляется. Объект может быть master из другого документа или другого типа объекта.

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

ObjectsToInstance() должен быть одномерным массивом из n>= 1 вариантов. Его записи определяют объекты, из которых необходимо создать новые объекты Shape . Запись часто ссылается на главный объект приложения Microsoft Visio. Он также может ссылаться на объект Shape приложения Visio, объект Selection или даже объект из другого приложения. Приложению не важно, каковы нижние и верхние границы массива записей ObjectsToInstance(). Вызовите эти vlb и vub соответственно.

  • Если ObjectToInstance(i) является целым числом j , то экземпляр объекта Master в наборе элементов документа целевого объекта, для которого создается 1 индекс j . Ячейка EventDrop в разделе События новой фигуры не активируется. Используйте метод Drop , если нужно активировать ячейку EventDrop.

  • Если ObjectToInstance(i)является строкой (или ссылкой на строки s ), создается экземпляр главного объекта с именами в наборе элементов документа целевого объекта; значение s может равняться свойству UniqueID или NameUглавного объекта. Ячейка EventDrop в разделе События новой фигуры не активируется. Используйте метод Drop , если нужно активировать ячейку EventDrop.

  • Для vlb<i<= vub , если объект ObjectsToInstance(i) пуст (ничего или неинициализирован в Microsoft Visual Basic), запись i приведет к повторному экземпляру ObjectsToInstance(j), где j — наибольшее значение <i , так что ObjectsToInstance(j) не пуст. Если вы хотите создать n экземпляров одной и той же вещи, необходимо указать только ObjectsToInstance(vlb ).

Параметр xyArray() должен быть одномерным массивом размером 2 м удваивает с нижней границей xylb и верхней границей xyub , где m>= n. Значения в массиве сообщают методу DropManyU , где следует размещать объекты Shape , которые он создает. ObjectsToInstance()( vlb+ ( i - 1)) удаляется в ( xy [( i - 1)2 + xylb ], xy [(i - 1)2 + xylb + 1]) для 1 <= i<= n.

Обратите внимание, что m>n разрешено. Для n<i<= m , i 'th вещь экземплярируется то же самое, что и n 'th вещь экземпляра. Таким образом, чтобы сделать m>= 1 экземпляров одной и той же вещи, можно передать массив ObjectsToInstance() с одной записью и m-записьюxyArray().

Если экземплярируемый объект является master, контакт нового объекта Shape размещается в заданном xy. В противном случае центр объектов Shape размещается в заданном xy.

Целочисленное значение, возвращаемое методом DropManyU, — это количество записей xy в xyArray, успешно обработанных методом DropManyU. Если все записи успешно обработаны, возвращается m . Если некоторые записи успешно обрабатываются до возникновения ошибки, созданные объекты Shape не удаляются и при этом возникает исключение, но по-прежнему возвращается положительное целое число.

Если предполагается, что все записи mxy обрабатываются правильно, количество новых объектов Shape , создаваемых методом DropManyU , обычно равно m. В редких случаях (например, при экземпляре объекта Selection) может быть создано более m объектов Shape. Вызывающий объект может определить количество созданных объектов Shape путем сравнения количества фигур в целевом объекте до и после выполнения метода DropManyU . Вызывающий объект может утверждать, что новые объекты Shape являются объектами с самыми высокими индексами в коллекции Shapes целевого объекта.

Если метод DropManyU возвращает ноль (0), idArray() возвращает значение NULL (Nothing). В противном случае возвращается одномерный массив целых чисел m , индексируемый от 0 до м – 1. IDArray() — это параметр out, выделенный методом DropManyU , а владение передается программе, которая вызвала метод DropManyU . В конечном итоге вызывающий объект должен выполнить процедуру SafeArrayDe в возвращаемом массиве. (Microsoft Visual Basic и Microsoft Visual Basic для приложений позаботиться об этом за вас.)

Если IDArray() возвращает значение, отличное от NULL (не Nothing), IDArray( i - 1), 1 <= i<= intReturned , возвращает идентификатор объекта Shape , созданного записью i 'th xyArray(), при условии, что запись i 'th xyArray() создана ровно один объект Shape . Если запись i 'th xyArray() породила несколько объектов Shape , в записи возвращается значение -1. Все записи i , intReturned<= i<m , return -1.

Примечание.

Начиная с Microsoft Visio 2000, вы можете использовать локальные и универсальные имена для ссылки на фигуры Visio, образцы, документы, страницы, строки, надстройки, ячейки, гиперссылки, стили, шрифты, master ярлыки, объекты пользовательского интерфейса и слои. Например, когда пользователь присваивает имя фигуре, пользователь указывает локальное имя. Начиная с Microsoft Office Visio 2003 электронная таблица shapesheet отображает только универсальные имена в формулах и значениях ячеек. (В предыдущих версиях универсальные имена не отображались в пользовательском интерфейсе.)

Как разработчик, вы можете использовать универсальные имена в программе, если вы не хотите изменять имя каждый раз, когда решение локализуется. Используйте метод DropMany для удаления нескольких фигур при использовании локальных имен для идентификации фигур. Используйте метод DropManyU для удаления нескольких фигур при использовании универсальных имен для идентификации фигур.

Пример

В следующем примере показано, как использовать метод DropManyU . Он удаляет один экземпляр каждого master в наборе элементов документа объекта Document макроса на Page1 объекта Document макроса. Перед выполнением этого макроса убедитесь, что в наборе элементов документа есть по крайней мере один master.

 
Public Sub DropManyU_Example() 
 
 On Error GoTo HandleError 
 
 Dim vsoMasters As Visio.Masters 
 Dim intMasterCount As Integer 
 Set vsoMasters = ThisDocument.Masters 
 intMasterCount = vsoMasters.Count 
 
 ReDim varObjectsToInstance(1 To intMasterCount) As Variant 
 ReDim adblXYArray(1 To (intMasterCount * 2)) As Double 
 Dim intCounter As Integer 
 For intCounter = 1 To intMasterCount 
 
 'Pass universal name of object to drop to DropManyU. 
 varObjectsToInstance(intCounter) = vsoMasters.ItemU(intCounter).NameU 
 
 'Set x components of where to drop to 2,4,6,2,4,6,2,4,6,... 
 adblXYArray (intCounter * 2 - 1) = (((intCounter - 1) Mod 3) + 1) * 2 
 
 'Set y components to 2,2,2,4,4,4,6,6,6,... 
 adblXYArray (intCounter * 2) = Int((intCounter + 2) / 3) * 2 
 
 Next intCounter 
 
 Dim aintIDArray() As Integer 
 Dim intProcessed As Integer 
 
 intProcessed = ThisDocument.Pages(1).DropManyU(varObjectsToInstance, _ 
 adblXYArray, aintIDArray) 
 Debug.Print intProcessed 
 
 For intCounter = LBound(aintIDArray) To UBound(aintIDArray) 
 Debug.Print intCounter; aintIDArray(intCounter) 
 Next intCounter 
 
 Exit Sub 
 
 HandleError: 
 MsgBox "Error" 
 
 Exit Sub 
 
End Sub

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.