Недавно тут возникла задача. На чертеже есть залитые области и просто линии. Вот линии надо все выбрать, то есть только те, у которых нет заливки. Пришлось писать скрипт. Вот он:
' Kaev Artem 20 december 2000 ' DIM FOb AS LONG DIM NOb AS LONG DIM ReturnValue AS INTEGER DIM ArrayID(100000) AS LONG DIM MaxArray AS LONG WITHOBJECT "CorelDraw.Automation.8" .UnselectAll MaxArray=1 .SelectNextObject FOb=.GetObjectsCDRStaticID() ReturnValue = .GetFillType() IF ReturnValue=0 THEN ArrayID(MaxArray)=.GetObjectsCDRStaticID() MaxArray=MaxArray+1 ENDIF WHILE (FOb<>NOb) .SelectNextObject NOb=.GetObjectsCDRStaticID() ReturnValue = .GetFillType() IF ReturnValue=0 THEN ArrayID(MaxArray)=.GetObjectsCDRStaticID() MaxArray=MaxArray+1 ENDIF WEND .UnselectAll .SelectObjectOfCDRStaticID ArrayID(1) FOR X=2 TO MaxArray-1 .AppendObjectToSelection ArrayID(X) NEXT X END WITHOBJECT END
Идея скрипта такая. Можно объявить массив DIM ArrayID(100000) AS LONG, а потом бежать по всем элементам. Это мы уже делали. И проверять есть ли у контура или линии заливка .GetFillType(). Если нет, то идентификатор объекта полученный функцией .GetObjectsCDRStaticID() заносим в массив. Потом мы заново начинаем выделять объекты, но только те, которые есть в массиве .AppendObjectToSelection ArrayID(X).