Меняем объекты местами (макрос)
Sancho / 01.04.2011, 17:12/00:41
Форум:
Один знакомый макрописатель попросил подсказать с одним кодом, в итоге "подсказка" получилась в виде готового макроса.
Option Explicit
Declare Function GetKeyState& Lib "user32" (ByVal vKey&)
Sub SwapShapes()
Dim sr As ShapeRange
Set sr = ActiveSelectionRange
If sr.Count = 2 Then
ActiveDocument.ReferencePoint = cdrCenter
Dim b As Boolean
If (GetKeyState(vbKeyShift) And &HFF80) <> 0 = True Then b = True
Dim s1 As Shape, s2 As Shape, st As Shape
Set s1 = sr(1): Set s2 = sr(2)
Dim x#, y#, w#, h#
Set st = s1.Duplicate
s2.GetPosition x, y
If b Then s2.GetSize w, h
s1.SetPosition x, y
If b Then s1.SetSize w, h
s1.OrderBackOf s2
st.GetPosition x, y
If b Then st.GetSize w, h
s2.SetPosition x, y
If b Then s2.SetSize w, h
s2.OrderBackOf st
st.Delete
End If
End Sub
Макрос меняет два выделенных объекта местами.
Если во время запуска макроса удерживать Shift, то обмен произойдёт не только положением но и размерами.
П.С. Оформлять в отельный GMS некогда и лень )))
Если у кого есть время, оформите сами и выложите здесь.
http://cdrpro.ru/forum/13-545-1
Меняет много объектов, но не меняет размер
не поняла, зачем duplicate - delete
s1.GetPosition x1, y1
s2.GetPosition x2, y2
s1.SetPosition x2, y2
s2.SetPosition x1, y1
ekali, потому что объекты меняются не только координатами X и Y, но и Z тоже.
Да, упустила, спасибо.