Метод Shape.DropMany (Visio)
Создает один или несколько новых объектов Shape в группе. Он возвращает массив идентификаторов объектов Shape , которые он создает.
Синтаксис
выражение.
DropMany
( _ObjectsToInstance()_
, _xyArray()_
, _IDArray()_
)
выражение Переменная, представляющая объект Фигура.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
ObjectsToInstance() | Обязательный | Variant | Определяет образцы или другие объекты, из которых следует создавать фигуры. |
xyArray() | Обязательный | Double | Массив чередующихся значений x и y, указывающих позиции для новых фигур. |
IDArray() | Обязательный | Integer | Параметр Out. Массив, возвращающий идентификаторы созданных фигур. |
Возвращаемое значение
Целое число
Замечания
Использование метода DropMany аналогично методу Drop объекта Page, Master или Shape, за исключением того, что вы можете использовать метод DropMany для создания нескольких объектов Shape одновременно, а не одного вызова метода. Метод DropMany создает объекты Shape на странице, в master или в фигуре группы, к которой он применяется (эта фигура называется целевым объектом в следующем обсуждении).
Вы можете определить, какие master удалить, передав метод DropManyобъект Master, индекс master или имя master. При передаче объекта DropMany не ограничивается просто удалением master из набора элементов документа, в который он удаляется. Объект может быть master из другого документа или другого типа объекта.
Передача целых чисел (master индексов) или строк (master имен) в DropMany выполняется быстрее, чем передача объектов, но целые числа или строки могут идентифицировать только образцы в наборе элементов документа, в который он удаляется. Следовательно, ваша программа должна каким-то образом получить мастера, о котором идет речь, в набор элементов документа, в первую очередь, при условии, что они еще не были там.
ObjectsToInstance() должен быть одномерным массивом из n>= 1 вариантов. Его записи определяют объекты, из которых необходимо создать новые объекты Shape . Запись часто ссылается на главный объект приложения Microsoft Visio. Он также может ссылаться на объект Shape приложения Visio, объект Selection или даже объект из другого приложения. Приложению не важно, какие нижние и верхние границы массива записей ObjectsToInstance . Вызовите эти vlb и vub соответственно.
Если ObjectsToInstance(i) — это ссылка на объект OLE, предоставляющий интерфейс IDataObject (в Microsoft Visual Basic для приложений ссылка на выделение, фигуру, master, направляющую или объект OLE), экземпляр объекта, на который он ссылается. По сути, это эквивалентно вызову Drop(ObjectsToInstance(i),x,y)..
Если ObjectToInstance(i) является целым числом j , то экземпляр объекта Master в наборе элементов документа целевого объекта, для которого создается 1 индекс j . Ячейка EventDrop в разделе События новой фигуры не активируется. Используйте метод Drop , если нужно активировать ячейку EventDrop.
Если ObjectToInstance(i)является строкой (или ссылкой на строки s ), создается экземпляр главного объекта с именами в наборе элементов документа целевого объекта; значение s может равняться свойству UniqueID или Nameглавного объекта. Ячейка 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. Значения в массиве сообщают методу DropMany , где следует размещать объекты 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.
Значение, возвращаемое методом DropMany , — это количество записей xy в xyArray(), успешно обработанных методом DropMany . Если все записи успешно обработаны, возвращается m . Если некоторые записи успешно обрабатываются до возникновения ошибки, созданные объекты Shape не удаляются и при этом возникает исключение, но по-прежнему возвращается положительное значение.
Если предполагается, что все записи mxy обрабатываются правильно, количество новых объектов Shape , созданных методом DropMany , обычно равно m. В редких случаях (например, при экземпляре объекта Selection) может быть создано более m объектов Shape. Вызывающий объект может определить количество созданных объектов Shape путем сравнения количества фигур в целевом объекте до и после выполнения метода DropMany . Вызывающий объект может утверждать, что новые объекты Shape являются объектами с самыми высокими индексами в коллекции Shapes целевого объекта.
Если метод DropMany возвращает ноль (0), idArray() возвращает null (Nothing). В противном случае возвращается одномерный массив целых чисел m , индексируемый от 0 до м – 1. IDArray() — это параметр out, выделенный методом DropMany , и владение передается программе, которая вызвала метод DropMany . В конечном итоге вызывающий объект должен выполнить процедуру SafeArrayDe в возвращаемом массиве. (Microsoft Visual Basic и 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 для удаления нескольких фигур при использовании универсальных имен для идентификации фигур.
Пример
В следующем примере показано, как использовать метод DropMany . Он удаляет один экземпляр каждого master в наборе элементов документа объекта Document макроса на Page1 объекта Document макроса. Перед выполнением этого макроса убедитесь, что в наборе элементов документа есть по крайней мере один master.
Public Sub DropMany_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 name of object to drop to DropMany.
varObjectsToInstance(intCounter) = vsoMasters.Item(intCounter).Name
'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).DropMany(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 и обратная связь.