Регистрация | | запомнить |
 
 
ВК



Просматривают:   1 Анонимно





Сделать подобный скрипт
print | #
Новичок
Присоединился:
2010/7/9 1:03
Откуда Минск
Сообщений: 4
Offline
Увидел классный скрипт здесь:
http://www.oberonplace.co...

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

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

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

Это реально?

Опубликовано: 2010/7/9 1:14


Re: Сделать подобный скрипт
Титан - модератор
Присоединился:
2006/4/8 19:42
Сообщений: 152
Offline
когда-то очень давно писал на форуме там же, скорее всего будет работать и в Х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


Работает так: выделяем кучу объектов, запускаем макрос, тыкаем в заменитель.
Имхо так быстрее, чем через тормозной буфер корела.

Опубликовано: 2010/7/9 9:28


Re: Сделать подобный скрипт
Новичок
Присоединился:
2010/7/9 1:03
Откуда Минск
Сообщений: 4
Offline
Спасибо, надеюсь , будет работать.
Только вот у меня знаний в этой области никаких. Не понимаю, как его сохранить, инсталлировать и запустить...
Ранее скачивал готовые макросы и кидал их в папку - а чс этим кодом как поступать?

Опубликовано: 2010/7/9 10:33


Re: Сделать подобный скрипт
Титан - модератор
Присоединился:
2006/4/8 19:42
Сообщений: 152
Offline

Опубликовано: 2010/7/9 11:05


Re: Сделать подобный скрипт
Новичок
Присоединился:
2010/7/9 1:03
Откуда Минск
Сообщений: 4
Offline
wOxxOm, спасибо - классный скрипт! Очень полезный и очень толковый - все одним махом делает )

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

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

Опубликовано: 2010/7/9 11:47


Re: Сделать подобный скрипт
Титан - модератор
Присоединился:
2006/4/8 19:42
Сообщений: 152
Offline
ээ, я потерял кайф от макросо-писания, но все это легко можно добавить в код - тут бывают товарищи с огоньком и соответствующими умениями.

Опубликовано: 2010/7/9 12:07


Re: Сделать подобный скрипт
Новичок
Присоединился:
2010/7/9 1:03
Откуда Минск
Сообщений: 4
Offline
товарищи с огоньком - где вы?
не ленитесь - классный скрипт получится.
Пробовал сам разобраться - нашел в Кореле, где записывать макросы, но у меня какая-то фигня кривая получается - руки не оттуда растут ))

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

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

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

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

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

Опубликовано: 2010/7/9 12:46







Форма быстрого ответа
ЛогинИмя   Пароль   Логин
Сообщение:          

      ПРИМЕР


 [далее...]
Уведомлять о сообщениях в теме.



[Настройки поиска]