Шаг 5 - Конкретная задача с уменьшением размеров

Суть проблемы такова. Есть некоторое приложение, конкретнее Gold Geohimik, которое умеет выдавать свои результаты в виде WMF файла, который можно прочитать в Corel и добавить всякие рамочки, описания и отдать начальству или в отчет. Проблема только простая масштаб не устанавливается. То есть у Вас может быть 1000 объектов, скажем, кружков содержаний элементов. Если их размер для отчета Вас не устроит, то Вам придется у тысячи таких кружков менять размер. Возмем простой пример. У нас есть 8 квадратов.

5.gif (3237 b)

И нам надо изменить размер этих квадратов скажем в 10 раз, но не меняя положение. Чего только я не пробовал, любые функции изменения размеров при применении их к нескольким выделеным объектам меняют положение, а стили для нетекстовых объектов не сохраняют размер. Короче кранты если учесть, что исходя из описанной выше ситуации надо править десятки тысяч объектов. Вот. Значит пишем вот сразу весь код.

WITHOBJECT "CorelDraw.Automation.8" 

.UnSelectAll
.SelectNextObject
IDRect1& = .GetObjectsCDRStaticID()
st& = .GetSize (XSize&, YSize&)
.SetSize (XSize&/10), (YSize&/10)
DO
	.SelectNextObject
	IDRect2& = .GetObjectsCDRStaticID()
	st&=.GetSize (XSize&, YSize&)
	if IDRect1&<>IDRect2& THEN
		.SetSize (XSize&/10), (YSize&/10)
	END IF
LOOP UNTIL IDRect1&=IDRect2&

END WITHOBJECT

.UnSelectAll отменяет выделение всех объектов, .SelectNextObject получает следующий выделенный объект. .GetObjectsCDRStaticID() дает нам уникальный идентификатор, который нам нужен чтобы не повторяться при уменьшении объекта, так как функция SelectNextObject работает по кругу, то есть циклично. .GetSize получает размер, а .SetSize его устанавливает. Так мы и бежим пока не встретим объект с уже повторяющимся идентифкатором LOOP UNTIL IDRect1&=IDRect2&.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.