Compartilhar via


Shape.DropMany method (Visio) (Método Shape.DropMany [Visio])

Cria um ou mais objetos Shape novos em um grupo. Retorna uma matriz de identificações dos objetos Shape que produz.

Sintaxe

expression. DropMany( _ObjectsToInstance()_ , _xyArray()_ , _IDArray()_ )

expressão Uma variável que representa um objeto Shape.

Parâmetros

Nome Obrigatório/Opcional Tipo de dados Descrição
ObjectsToInstance() Obrigatório Variant Identifica mestres ou outros objetos a partir dos quais criar formas.
xyArray() Obrigatório Double Uma matriz de valores x e y alternados especificando as posições das novas formas.
IDArray() Obrigatório Integer Parâmetro externo. Uma matriz que retorna as identificações das formas criadas.

Valor de retorno

Número inteiro

Comentários

Usar o método DropMany é como usar o método Drop do objeto Page, Master ou Shape, exceto por você poder usar o método DropMany para criar vários novos objetos Shape de uma vez, em vez de um por chamada de método. O método DropMany cria novos objetos Shape na página, no mestre ou na forma de grupo na qual é aplicado (essa forma é chamada "objeto de destino" na discussão a seguir).

Você pode identificar qual mestre soltar passando ao método DropMany um objeto Master, o índice ou o nome do mestre. Ao passar um objeto, DropMany não é restringido a apenas soltar um mestre do estêncil do documento sobre o qual está sendo solto. O objeto pode ser um mestre de outro documento ou outro tipo de objeto.

Passar números inteiros (índices de mestre) ou sequências de caracteres (nomes de mestres) para DropMany é mais rápido que passar objetos, mas os números inteiros ou as sequências de caracteres podem identificar apenas mestres no estêncil do documento sobre o qual está sendo solto. Assim, seu programa precisa primeiro colocar de alguma maneira os mestres em questão no estêncil do documento, desde que já não estejam lá.

ObjectsToInstance() deve ser uma matriz unidimensional de n>= 1 variantes. Suas entradas identificam objetos dos quais você deseja fazer novos objetos Shape. Frequentemente uma entrada se refere a um objeto Master do aplicativo Microsoft Visio. Ela também pode referir-se a um objeto Shape ou Selection do aplicativo Visio ou até mesmo a um objeto de outro aplicativo. A aplicação não se importa com os limites de matrizes inferiores e superiores das entradas ObjectsToInstance . Chame estes vlb e vub , respetivamente.

  • Se ObjectsToInstance(i) for uma referência a um objeto OLE que fornece uma interface IDataObject (no Microsoft Visual Basic for Applications, uma referência a uma seleção, forma, mestre, guia ou objeto OLE), o objeto que está referenciando será instanciado. Isto é essencialmente equivalente a chamar Drop(ObjectsToInstance(i),x,y).

  • Se ObjectsToInstance(i) for o número inteiro j , é feita uma instância do objeto Principal no stencil do documento do objeto de destino cujo índice baseado em 1 é j . A célula EventDrop na seção Eventos da nova forma não é disparada. Use o método Drop no lugar, se desejar que a célula EventDrop seja disparada.

  • Se ObjectsToInstance(i) for a cadeia (ou uma referência à cadeia de carateres), será efetuada uma instância do objeto Principal com o nome no stencil do documento do documento do objeto de destino; s pode ser igual à propriedade UniqueID ou Name do objeto Principal. A célula EventDrop na seção Eventos da nova forma não é disparada. Use o método Drop no lugar, se desejar que a célula EventDrop seja disparada.

  • Para vlb<i<= vub , se ObjectsToInstance(i) estiver vazio (Nada ou não inicializado no Microsoft Visual Basic), a entrada i fará com que ObjectsToInstance(j) seja instânciado novamente, em que j é o maior valor <de forma a que ObjectsToInstance(j) não esteja vazio. Se desejar criar n instâncias da mesma coisa, apenas ObjectsToInstance(vlb) precisará ser fornecido.

O argumento xyArray() deve ser uma matriz unidimensional de duplos de 2 m com xylb de limite inferior e xyub de limite superior, em que m>= n. Os valores na matriz informam o método DropMany onde posicionar os objetos Shape que ele produz. ObjectsToInstance( vlb + ( i - 1)) é largado em ( xy [( i - 1)2 + xylb ], xy [(i - 1)2 + xylb + 1]) para 1 <= i<= n.

Tenha em atenção que m>n é permitido. Para n<i<= m , a i 'th thing instanced é a mesma coisa que a n 'th thing instanced. Assim, para criar m>= 1 instâncias da mesma coisa, pode transmitir uma matriz ObjectsToInstance() com uma entrada e uma matriz xyArray() de entrada m.

Se a entidade instanciada for um mestre, o pino do novo objeto Shape será posicionado no xy determinado. Caso contrário, o centro dos objetos Shape será posicionado no xy determinado.

O valor retornado pelo método DropMany é o número de entradas xy em xyArray() que o método DropMany processou com êxito. Se todas as entradas foram processadas com êxito, m será retornado. Se algumas entradas forem processadas com êxito antes da ocorrência de um erro, os objetos da Forma produzidos não serão eliminados, o que gera uma exceção, mas devolve um valor positivo.

Presumindo que todas as m entradas xy sejam processadas corretamente, o número de novos objetos Shape produzidos pelo método DropMany será geralmente igual a m. Em casos raros (por exemplo, se um objeto Selection for instanciado), mais de m objetos Shape podem ser produzidos. O chamador pode determinar o número de objetos Shape produzidos comparando o número de forma no objeto de destino antes de depois de o método DropMany ser executado. O chamador pode assumir que os novos objetos Shape sejam aqueles com os maiores índices na coleção Shapes do objeto de destino.

Se o método DropMany devolver zero (0), IDArray() devolve Nulo (Nada). Caso contrário, ele retornará uma matriz unidimensional de m números inteiros indexados de 0 a m - 1. IDArray() é um parâmetro externo alocado pelo método DropMany e a propriedade é passada para o programa que chamou o método DropMany. Por fim, o chamador deve executar o procedimento SafeArrayDestroy na matriz retornada. (O Microsoft Visual Basic e o Visual Basic for Applications cuidam disso para você.)

Se IDArray() devolver não nulo (não Nada), IDArray( i - 1), 1 <= i<= intReturned , devolve o ID do objeto Shape produzido pela entrada i 'th xyArray , desde que a entrada i 'th xyArray() produziu exatamente um objeto de Forma . Se a entrada i 'th xyArray() produziu vários objetos de Forma , -1 é devolvido na entrada. Todas as entradas i , intReturned<= i<m , devolvem -1.

Observação

A partir do Microsoft Visio 2000, você pode usar nomes locais e universais para se referir a formas, mestres, documentos, páginas, linhas, complementos, células, hiperlinks, estilos, fontes, atalhos mestre, objetos UI e camadas do Visio. Quando um usuário nomeia uma forma, por exemplo, o usuário está especificando um nome local. A partir do Microsoft Office Visio 2003, a planilha ShapeSheet exibe apenas nomes universais em fórmulas de células e valores. (Em versões anteriores, os nomes universais não eram visíveis na interface do usuário.).

Como desenvolvedor, você poderá usar nomes universais em um programa quando não quiser alterar um nome a cada vez que uma solução for localizada. Use o método DropMany para soltar mais de uma forma ao usar nomes locais para identificar as formas. Use o método DropManyU para soltar mais de uma forma ao usar nomes universais para identificar as formas.

Exemplo

O exemplo a seguir mostra como usar o método DropMany. Ele solta uma instância de cada mestre no estêncil do documento do objeto Document da macro sobre a Página1 do objeto Document da macro. Antes de executar essa macro, certifique-se de que haja pelo menos um mestre no estêncil do documento.

 
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

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.