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


Метод Shape.DropMany (Visio)

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

Синтаксис

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

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

Параметры

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

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

Целое число

Замечания

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

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

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

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

  • Если ObjectsToInstance(i) — это ссылка на объект OLE, предоставляющий интерфейс IDataObject (в Microsoft Visual Basic для приложений ссылка на выделенный объект, фигура, главный объект, направляющая или ОБЪЕКТ OLE), экземпляр объекта, на который он ссылается. По сути, это эквивалентно вызову Drop(ObjectsToInstance(i),x,y)..

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

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

  • Для vlb<i<= vub , если объект ObjectsToInstance(i) пуст (Nothing или неинициализирован в 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().

Если экземпляремая сущность является главной, то закрепление нового объекта 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, образцы, документы, страницы, строки, надстройки, ячейки, гиперссылки, стили, шрифты, основные сочетания клавиш, объекты пользовательского интерфейса и слои. Например, когда пользователь присваивает имя фигуре, пользователь указывает локальное имя. Начиная с Microsoft Office Visio 2003 электронная таблица shapesheet отображает только универсальные имена в формулах и значениях ячеек. (В предыдущих версиях универсальные имена не отображались в пользовательском интерфейсе.)

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

Пример

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

 
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 и обратная связь.