Меняем объекты местами (макрос)
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 тоже.
Да, упустила, спасибо.