Сделать подобный скрипт
09/07/2010 1:14:50
#Link
Увидел классный скрипт здесь:
http://www.oberonplace.co...Но для старых версий Корела - в новых не работает. Хотелось бы такой же, но чтобы работал в Х4 - Х5.
Суть в том, что он заменяет все выделенные объекты (допустим, множество кружочков) на такой объект, который находится в буфере обмена (допустим, звездочка). При этом можно настроить его так, чтобы размер или повторял исходный объект, или оставался таким же.
Можно сделать еще круче - если в буфере будут несколько разных объектов, допустим, звездочка, ромб, квадрат и т.д., чтобы скрипт их произвольно размещал на месте выделенных объектов.
Это реально?
Re: Сделать подобный скрипт
09/07/2010 9:28:22
#Link
когда-то очень давно писал на форуме там же, скорее всего будет работать и в Х4/Х5
Sub scatter()
Dim sh As Shape, sr As ShapeRange, x#, y#, w#, h#, i&
Dim AgentSmith As Shape, VSR As ShapeRange
If ActiveDocument Is Nothing Then Exit Sub
Set sr = ActiveSelection.Shapes.FindShapes()
If sr.Count = 0 Then
MsgBox "Select target objects, invoke the macro, click Agent Smith shape"
Exit Sub
End If
If ActiveDocument.GetUserClick(x, y, i, -1, Snap:=false, CursorShape:=313) Then _
Exit Sub
With ActivePage.SelectShapesAtPoint(x, y, SelectUnfilled:=True)
If .Shapes.Count = 0 Then Beep: Exit Sub
Set AgentSmith = .Shapes(.Shapes.Count)
End With
Set VSR = New ShapeRange
ActiveDocument.ReferencePoint = cdrCenter
For Each sh In sr
sh.GetBoundingBox x, y, w, h
With AgentSmith.TreeNode.GetCopy
.VirtualShape.RotationAngle = sh.RotationAngle
.VirtualShape.SetBoundingBox x, y, w, h, KeepAspect:=True
.LinkAsChildOf sh.Layer.TreeNode
VSR.Add .VirtualShape
End With
Next
ActiveDocument.LogCreateShapeRange VSR
sr.delete ' evaporate originally selected shapes
End Sub
Работает так: выделяем кучу объектов, запускаем макрос, тыкаем в заменитель.
Имхо так быстрее, чем через тормозной буфер корела.
Re: Сделать подобный скрипт
09/07/2010 10:33:29
#Link
Спасибо, надеюсь , будет работать.
Только вот у меня знаний в этой области никаких. Не понимаю, как его сохранить, инсталлировать и запустить...
Ранее скачивал готовые макросы и кидал их в папку - а чс этим кодом как поступать?
Re: Сделать подобный скрипт
09/07/2010 11:05:12
#Link
Re: Сделать подобный скрипт
09/07/2010 11:47:45
#Link
wOxxOm, спасибо - классный скрипт! Очень полезный и очень толковый - все одним махом делает )
Кстати, его можно модифицировать - сделать еще одну версию, чтобы новый объект копировал не только размер, но и цвет замещаемого.
Еще было бы прикольно сделать версию, когда новые объекты произвольно вращаются, т.е. изменяют немного свое положение относительно своего центра вращения - это добавит "спонтанности" к результату...
Re: Сделать подобный скрипт
09/07/2010 12:07:38
#Link
ээ, я потерял кайф от макросо-писания, но все это легко можно добавить в код - тут бывают товарищи с огоньком и соответствующими умениями.
Re: Сделать подобный скрипт
09/07/2010 12:46:20
#Link
товарищи с огоньком - где вы?
не ленитесь - классный скрипт получится.
Пробовал сам разобраться - нашел в Кореле, где записывать макросы, но у меня какая-то фигня кривая получается - руки не оттуда растут ))
Кто может дописать еще 2-3 версии на основе макроса wOxxOm?
1. чтобы новый объект копировал не только размер, но и цвет замещаемого объекта.
2. чтобы новые объекты произвольно вращались по своей оси
3. Супер-макрос
Выделенные исходные объекты (например, 100 прямоугольников) замещаются в произвольном порядке на объекты, находящиеся в буфере обмена (допустим, звездочка, кружок и ромб) или по клику на группе этих сгруппированных объектов (звездочка, кружок и ромб).
При этом можно также сделать несколько модификаций данного макроса:
- чтобы новые объекты оставались неизменными по свойствам;
- чтобы они принимали такой же размер, как у исходного объекта;
- чтобы они копировали размер и цвет исходного (замещаемого) объекта;
- чтобы они копировали размер и цвет исходного (замещаемого) объекта и произвольно вращались по своей оси
Источник: https://powerclip.ru/modules/newbb/viewtopic.php?topic_id=9495&start=0