(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Delphi и Corel Draw

Источник: mdelphi
Грабец Олег

Надеюсь, многие сталкивались с corel draw? А у многих слюнки текли, что это мощнейший графический редактор и хотелось бы под него свои программы писать, к примеру, чертежи выводить? Я один из вас :)

Формат файлов *.cdr конечно, не представлю, т.к. сам его не знаю :), но как с этим зверем работать расскажу. Вычитал, что с corel draw можно работать только через скрипт, причем изначально я готовил файлы скриптов *.csc, а затем их запускал в самом редакторе. Рабочий инструмент для освоения - corel script editor. Если Вы хотите действительно что-то написать, то он вам просто необходим, хотя бы ради того, что смотреть как corel draw их сам создает, ну и самое главное - дока по языку и функциям. Все замечательно, только вот скрипты медленно работают т.к. они эмитируют работу человека - т.е. кнопочки сами нажимаются, панельки меняются и т.д.
А чертеж, к примеру на котором около 3000 объектов мог загружаться и исполнятся до часу! Нет, когда это утомляет, то можно и самому посидеть - глядишь за неделю сделаешь :)

И тут я "чисто случайно" наткнулся на статейку http://www.djpate.freeserve.co.uk/autocdrw.htm. Оказывается можно и через ole этот corel draw дергать, и как оказывается, не так уж оно и сложно. Да, совершенно верно, нужно использовать coreldraw.automation.xx. Я возился с 8-й версией. Забегая на перед, скажу, что тот же чертеж выводился в течении 5-10 минут.

Ну что, начнем?

var
coreldraw: variant;

coreldraw := createoleobject('coreldraw.automation.8');
// цифирку можете свою поставить
coreldraw.filenew;
// или coreldraw.fileopen(filename);
coreldraw.setdocvisible(true);
// можно и не показывать, что он там делает, но ведь интересно! :)
// кстати, можно нарисовать, а потом показать - будет на 30% быстрее
... // ну и в конце
coreldraw.filesave('newname', 0, false, 0, false);
coreldraw.fileexit(false); // можно не писать, если не надо закрывать
coreldraw := unassigned;

Формат функций доступным английским языком описан в draw_scr.hlp. Ну а дальше, чего душа (или начальство :) ) желает:

coreldraw.setpageorientation(0);
coreldraw.setpagesize(pagew, pageh);
coreldraw.newlayer('newlayer1');
coreldraw.selectlayer('newlayer1');
coreldraw.createellipse(calcy(y1)), calcx(x1), calcy(y2), calcx(x2), 0, 0, 0);
// ничего я не перепутал!!! именно так у них координаты!
coreldraw.createrectangle(calcy(y1)), calcx(x1), calcy(y2), calcx(x2), calcx(radius));
...

Все ясно? За дело!
Да, чуть не забыл о самом главном - как и у любой системы в corel draw есть свои "заморочки" :)
Ноль координат находится в середине листа бумаги (оригинально, правда?)
Положительная ось y направлено вверх, а x - в право.
Координаты - целые числа в микронах. Для удобства я писал функцию:
function calcx(x_mm:double):longint;
begin
result := round(x_mm*10000);
end;

Углы не знаю в чем, но 90 градусов надо записать как 90000000. Положительные против часовой стрелки.
Принцип прорисовки таков: создается объект, а затем ему присваиваются различные свойства, такие как цвет, тип заливки, толщина линий и пр. По умолчанию эти значения через автоматизацию выставить нельзя - не поддерживается.
Выше упомянутое наглядно видно на прорисовке текста:

coreldraw.createartistictext( text, calcx(x), calcy(y));
// создаем текст. x,y - левый нижний
// как видите, нет параметров шрифта, размера и пр.
with font do
begin
if (italic) and (bold) then fsk:=14 else
if (italic) then fsk:=8 else
if (bold) then fsk:=13 else fsk:=7;
end;
coreldraw.setcharacterattributes( 0, 0, font.name, fsk, abs(font.size)*10,
0, 0, 0, 0, 0, 1000, 1000, halign);
// присваиваем атрибуты шрифта.
// halign имеет значения 1,2,3 - влево, по центру, вправо соответственно
colortocmyk(font.color, c,m,y,k);
// это моя функция для преобразования tcolor в составляющие в модели cmyk
coreldraw.storecolor(2, c,m,y,k, 0,0,0,0); // создание цвета
coreldraw.applyuniformfillcolor; // применяем цвет к объекту

Тоже самое относится к трансформации объектов - сперва создаете, а затем изменяете как хотите.
Работают функции для получения информации.

coreldraw.getsize(xsize, ysize); // получили размеры объекта
coreldraw.moveobject(0, -ysize); // сдвинули его вниз на свой размер

Можно "проверить" все существующие объекты. За круглым столом спрашивали, как это делается, а делается это так:

var objid, firstobjid:longint;
begin
coreldraw.selectallobjects;
coreldraw.selectnextobject(true);
// true для "захода" в сгруппированный объект
firstobjid := coreldraw.getobjectscdrstaticid;
repeat
...
// работа с объектом coreldraw.selectnextobject(true);
objid := coreldraw.getobjectscdrstaticid;
until objid = firstobjid; ...

Вот теперь вроде все. Пишите, если что не понятно



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 29.11.2006 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Pinnacle Studio 22 Ultimate
ABBYY Lingvo x6 Европейская Домашняя версия, электронный ключ
TeeBI for RAD Studio Suite with source code single license
SAP Crystal Server 2011 WIN INTL 5 CAL License
Zend Studio Commercial License 1 Year Free Upgrades
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Реестр Windows. Секреты работы на компьютере
Мир OLAP и Business Intelligence: новости, статьи, обзоры
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100