All Forums
 Категория Visio
 Форум Вопросы и ответы
 Работа со свойствами шейпа
Author Previous Topic Topic Next Topic  

WiseChen

Russia
12 Posts

Posted - 10/30/2003 :  16:11:34
'Идея данной процедуры в том чтобы бросить шейп Wall
'по координатам (X;Y), нужной длины, на слой LayerName
'Длина и координаты дб в метрах
'проболвал писать:
'Set CellObj = MasterObj.Shapes.Item(1).CellsSRC(visSectionProp, visRowProp + 4, visCustPropsValue)
'CellObj.Formula = "7,0000 m"
' эффект оригинальный: свойство меняется а длина на самом чертеже
' как была по умолчанию 3 м так и осталась!?
' Вот эти строчки
'Set CellObj = MasterObj.Shapes.Item(1).CellsSRC(visSectionProp, visRowProp + 0, visCustPropsValue)
'CellObj.Formula = "200 mm"
' Дают анналогичный эффект с другим пользовательским свойством - толщиной
' ------------
' Добрался до свойств BeginX, BeginY, но почему в окне Size&Position
' значение одно, ShapeSheet показывает второе значение,
' а CellObj.Formula показывает третье значение.
' В чем прикол????????
' Ниже привожу листинг всей процедуры. Звездочками
' обозначено место эспериментов



Sub Add_Stencil()

Dim DocObj As Visio.Document
Dim MastersObj As Visio.Masters
Dim MasterObj As Visio.Master
Dim MasterName As String
Dim LayerObj As Visio.Layer
Dim i, x, y As Integer
Dim StPath As String
Dim StName As String
Dim LayerName As String
Dim CellObj As Visio.Cell


'Путь к стенсилу
StPath = "C:\Program Files\Microsoft Office\Visio10\1033\Solutions\Building Plan\"
'имя стенсила
StName = "Walls, Doors and Windows.vss"
'название шаблона
MasterName = "Wall"
' На какой слой бросить
LayerName = "2 этаж"
' куда бросить
x = 1
y = 1

Set DocObj = Open_Stencil(StPath, StName)

Set MastersObj = DocObj.Masters
For i = 1 To MastersObj.Count
' UserForm1.ListBox1.AddItem MastersObj.Item(i).Name
If StrComp(MastersObj.Item(i).Name, MasterName, vbTextCompare) = 0 Then
' MsgBox "Master " & MasterName & " found"
Set MasterObj = MastersObj.Item(i)
Exit For
End If
Next i

'Указываем что шаблон будет на слое LayerName
MasterObj.Layers.Item(1).Name = LayerName
' Если шаблон принадлежал каким то еще слоям -удаляем их
For i = 2 To MasterObj.Layers.Count
Set LayerObj = MasterObj.Layers.Item(i)
LayerObj.Remove MasterObj.Shapes.Item(1), 1
Next i
' ******
' собственно бросаем шаблон на страницу по координатам (x,y)
Set CellObj = MasterObj.Shapes.Item(1).CellsSRC(visSectionObject, visRowXForm1D, vis1DBeginX)
CellObj.ResultIU = 500

' Set CellObj = MasterObj.Shapes.Item(1).CellsSRC(visSectionProp, visRowProp + 4, visCustPropsValue)
' CellObj.Formula = "10,0000 m"

ActivePage.Drop MasterObj, x, y

' UserForm1.Show
End Sub

Digitall

Russia
389 Posts

Posted - 11/06/2003 :  08:31:43  Visit Digitall's Homepage
quote:
Originally posted by WiseChen

'Идея данной процедуры в том чтобы бросить шейп Wall
'по координатам (X;Y), нужной длины, на слой LayerName
'Длина и координаты дб в метрах
'проболвал писать:
'Set CellObj = MasterObj.Shapes.Item(1).CellsSRC(visSectionProp, visRowProp + 4, visCustPropsValue)
'CellObj.Formula = "7,0000 m"
' эффект оригинальный: свойство меняется а длина на самом чертеже
' как была по умолчанию 3 м так и осталась!?


Вот что я получил немного подкорректировав макрос из документации:

Sub HelloWorld()
'Object variables to be used in the program.
Dim stnObj As Visio.Document 'Stencil document that contains master
Dim mastObj As Visio.Master 'Master to drop
Dim pagsObj As Visio.Pages 'Pages collection of document
Dim pagObj As Visio.Page 'Page to work in
Dim shpObj As Visio.Shape 'Instance of master on page
'Get the first page in the document associated with the VBA program.
'A new document always has one page, whose index in the Pages
'collection is 1.
Set pagsObj = ThisDocument.Pages
Set pagObj = pagsObj.Item(1)
'Get the stencil from the Documents collection and set the master.
Set stnObj = Documents.Add("Walls, Doors and Windows.vss")
Set mastObj = stnObj.Masters("Wall")
'Drop the rectangle in the middle of a US letter-size page.
Set shpObj = pagObj.Drop(mastObj, 4.25, 5.5)
'Set the text of the rectangle.
Set celObj = shpObj.CellsSRC(visSectionProp, visRowProp + 4, visCustPropsValue)
celObj.Formula = "7,0000 m"
'Save the drawing. The message pauses the program
'so you know the drawing is finished.
ThisDocument.SaveAs "hello.vsd"
MsgBox "Drawing finished!", , "Hello World!"
End Sub

Работает в Visio 2002. Судя по пути трафарета, именно он у Вас и установлен.

Стена меняет свой размер до 7 метров.
Использовал макрос из DVS p.335 Getting a Cell object by section, row, and cell indexes
и p.330 Creating a simple drawing: an example
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)