V-Форум / Corel VBA / Тема: Сделать подобный скрипт

Сделать подобный скрипт

 09/07/2010 1:14:50 #Link

Schranz

Увидел классный скрипт здесь:
http://www.oberonplace.co...

Но для старых версий Корела - в новых не работает. Хотелось бы такой же, но чтобы работал в Х4 - Х5.

Суть в том, что он заменяет все выделенные объекты (допустим, множество кружочков) на такой объект, который находится в буфере обмена (допустим, звездочка). При этом можно настроить его так, чтобы размер или повторял исходный объект, или оставался таким же.

Можно сделать еще круче - если в буфере будут несколько разных объектов, допустим, звездочка, ромб, квадрат и т.д., чтобы скрипт их произвольно размещал на месте выделенных объектов.

Это реально?

Re: Сделать подобный скрипт

 09/07/2010 9:28:22 #Link

wOxxOm

когда-то очень давно писал на форуме там же, скорее всего будет работать и в Х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

Schranz

Спасибо, надеюсь , будет работать.
Только вот у меня знаний в этой области никаких. Не понимаю, как его сохранить, инсталлировать и запустить...
Ранее скачивал готовые макросы и кидал их в папку - а чс этим кодом как поступать?

Re: Сделать подобный скрипт

 09/07/2010 11:05:12 #Link

wOxxOm

а вот и готовый макрос

Re: Сделать подобный скрипт

 09/07/2010 11:47:45 #Link

Schranz

wOxxOm, спасибо - классный скрипт! Очень полезный и очень толковый - все одним махом делает )

Кстати, его можно модифицировать - сделать еще одну версию, чтобы новый объект копировал не только размер, но и цвет замещаемого.

Еще было бы прикольно сделать версию, когда новые объекты произвольно вращаются, т.е. изменяют немного свое положение относительно своего центра вращения - это добавит "спонтанности" к результату...

Re: Сделать подобный скрипт

 09/07/2010 12:07:38 #Link

wOxxOm

ээ, я потерял кайф от макросо-писания, но все это легко можно добавить в код - тут бывают товарищи с огоньком и соответствующими умениями.

Re: Сделать подобный скрипт

 09/07/2010 12:46:20 #Link

Schranz

товарищи с огоньком - где вы?
не ленитесь - классный скрипт получится.
Пробовал сам разобраться - нашел в Кореле, где записывать макросы, но у меня какая-то фигня кривая получается - руки не оттуда растут ))

Кто может дописать еще 2-3 версии на основе макроса wOxxOm?

1. чтобы новый объект копировал не только размер, но и цвет замещаемого объекта.

2. чтобы новые объекты произвольно вращались по своей оси

3. Супер-макрос Выделенные исходные объекты (например, 100 прямоугольников) замещаются в произвольном порядке на объекты, находящиеся в буфере обмена (допустим, звездочка, кружок и ромб) или по клику на группе этих сгруппированных объектов (звездочка, кружок и ромб).

При этом можно также сделать несколько модификаций данного макроса:
- чтобы новые объекты оставались неизменными по свойствам;
- чтобы они принимали такой же размер, как у исходного объекта;
- чтобы они копировали размер и цвет исходного (замещаемого) объекта;
- чтобы они копировали размер и цвет исходного (замещаемого) объекта и произвольно вращались по своей оси

Источник: https://powerclip.ru/modules/newbb/viewtopic.php?topic_id=9495&start=0

Rambler's Top100