Главная » Delphi, OLE, САПР » Текстовая надпись Простой текст КОМПАС в DELPHI

0

Для написания текстов на листе чертежа используется метод ksText интерфейса ksDocument2D. Вот его прототип:

function ksText(

x: Double;        //координата x выводимого текста y: Double;      //координата y выводимого текста ang: Double;       //угол наклона текста

hStr: Double;      //высота текста

ksuStr: Double;    //растяжение текста

bitVector: Integer; //набор флагов выводимого текста

const s: WideString //выводимая строка

): Integer;

Теперь подробнее.

С параметрами x и y думаю все ясно. Они задают месторасположение текста на чертеже.

Параметр ang определяет угол, под которым пишется текст (см. рис. ниже).

Параметр hStr задает размер шрифта, которым будет написан текст. Так что здесь думаю тоже все просто.

Параметр ksuStr задает коэффициент растяжения текста по горизонтали. Для большей ясности взгляните на рисунок ниже. На нем первая строка отображена без растяжения, а вторая – с двойным (ksuStr=2).

Параметр bitVector задает тип выводимого текста. Для обычного текста он должен быть равен нулю. Работу с этим параметром мы подробно разберем в следующих разделах этой главы.

Теперь о возвращаемом значении. В случае успеха данный метод возвращает указатель на текст (попросту говоря некоторое отличное от нуля значение), а в случае ошибки – нуль.

Ну и напоследок небольшой пример:

Var

………

Begin

………

………

Document2D: ksDocument2D;

Document2D.ksText(100,100,

0, //без наклона

5, //пятым шрифтом

0, //без растяжения

0, //обычный текст

‘Выводимый текст’);

Наклонный, жирный и подчеркнутый шрифт

По умолчанию система КОМПАС выводит текст наклонным шрифтом. Однако с помощью параметра bitVector вы можете сами устанавливать нужное вам начертание текста. Данный параметр имеет ряд предопределенных значений, описанных в документации, но вот в заголовочных файлах они не представлены. Поэтому численное значение мы вынуждены задавать самостоятельно.

Так как текст уже выводится наклонным шрифтом, то для отключения наклона параметр bitVector должен быть установлен в значение ITALIC_OFF (128)1.

Для вывода текста полужирным шрифтом используется значение BOLD_ON(256), а в случае подчеркивания UNDERLINE_ON (1024).

Данные значения могут сочетаться друг с другом.

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

Const

……

Var

……

Begin

……

ITALIC_OFF = 128;

BOLD_ON = 256;

UNDERLINE_ON = 1024;

Document2D: ksDocument2D;

Document2D.ksText(100, 100, 0,5,0,0,’Обычный шрифт’);

Document2D.ksText(100, 90, 0,5,0,ITALIC_OFF,’Шрифт без наклона’); Document2D.ksText(100, 80, 0,5,0,BOLD_ON,’Полужирный шрифт’); Document2D.ksText(100, 70, 0,5,0,UNDERLINE_ON,’Подчеркнутый шрифт’);

……

Результат работы данной программы представлен ниже:

1 Здесь и далее в скобках указывается численное значение константы

Верхнее и нижнее отклонения

Для вывода верхнего и нижнего отклонений предусмотрено два1 значения параметра bitVector: UPPER_DEVIAT (4), который говорит о том, что выводимый текст является верхним отклонением; и LOWER_DEVIAT (5), которое говорит о том, что выводимый текст является нижним отклонением.

Для того чтобы было более понятно. Рассмотрим небольшой пример:

Const

………

Var

………

Begin

……

UPPER_DEVIAT = 4;

LOWER_DEVIAT = 5;

Document2D: ksDocument2D;

Document2D.ksText(100, 100, 0,5,0,0,’Текст перед отклонениями’);

Document2D.ksText(175, 100, 0,5,0,UPPER_DEVIAT,’Верхнее отклонение’); Document2D.ksText(175, 100, 0,5,0,LOWER_DEVIAT,’Нижнее отклонение’);

Document2D.ksText(225, 100, 0,5,0,0,’Текст после отклонений’);

………

В результате таких нехитрых действий будет выведен текст вида:

Обращаю ваше внимание на то, что при выводе элементов данного текста координата Y у них у всех одинаковая (система КОМПАС сама располагает отклонениями на нужной высоте относительно основного текста). Меняется только координата x.

1 На самом деле 4, но остальные два мы опускаем


Дробь

Вывод дроби очень похож на вывод отклонений. Разница состоит только в том, что используются другие константы: NUMERATOR (1) для числителя и DENOMINATOR (2) для знаменателя.

Взглянем на небольшой пример:

Const

……

Var

……

Begin

……

NUMERATOR = 1;

DENOMINATOR = 2;

Document2D: ksDocument2D;

Document2D.ksText(100, 100, 0,5,0,0,’Текст перед дробью’); Document2D.ksText(160, 100, 0,5,0,NUMERATOR,’Числитель’);

Document2D.ksText(160, 100, 0,5,0, DENOMINATOR, ‘Знаменатель’); Document2D.ksText(195, 100, 0,5,0,0,’Текст после дроби’);

……

В результате работы такой программы будет получен текст вида:

В данном примере мы так же и в случае с отклонениями все части текста имеют одинаковую координату y.

Подстрока и надстрока

Все выше описанное кажется достаточно простым и понятным. Так оно и есть. Но вот вывод подстрок и надстрок – полная засада (на языке было другое слово). Мало того, что он, по всей видимости, реализован не до конца, или реализован с ошибками, так еще и документация по поводу него нагло врет. Но давайте по порядку. Вот официальная версия событий:

Для вывода подстрок и надстрок используется три константы:

S_BASE (7) – выводимая строка является строкой, у которой есть надстрока и подстрока;

S_UPPER_INDEX (8) – выводимая строка является надстрокой; S_LOWER_INDEX (9) – выводимая строка является подстрокой.

Вроде бы все просто и понятно. Да, в теории красиво, но на практике… Во-первых,  строка,  у  которой  есть  надстрока  или  подстрока  не нуждается ни в каком дополнительном флаге. Для нее вполне достаточно

параметра bitVector установленного в значение ноль.

Во-вторых, константа S_LOWER_INDEX численно равна не 9, как это написано в документации, а 7.

В-третьих, константа S_UPPER_INDEX численно равна не 8, как это написано в документации, а … хрен знает чему. На самом деле мне так и не

удалось определить ее верное численное значение. Поэтому в примере ниже мы будем выводить только подстроку, с выводом надстрок я так и не разобрался.

Ниже приводится пример вывода подстроки:

Const

……

Var

……

Begin

……

S_LOWER_INDEX = 7;

Document2D: ksDocument2D;

Document2D.ksText(100, 100, 0,5,0,0,’У меня есть подстрока’); Document2D.ksText(100, 100, 0,5,0,S_LOWER_INDEX,’Подстрока’);

………

Ниже представлен результат работы этой программы.

Обращаю ваше внимание на то, что обе строки имеют одинаковые координаты.

Источник: Норсеев Сергей, «РАЗРАБОТКА ПРИЛОЖЕНИЙ ПОД КОМПАС В DELPHI»

По теме:

  • Комментарии