Главная » Delphi, OLE, САПР » Редактирование объектов спецификации – КОМПАС в DELPHI

0

Установить текст в определенной колонке

В предыдущей главе мы рассмотрели, как создать объект спецификации, теперь поговорим о том, как его отредактировать. Для изменения текста в заданной колонке объекта спецификации используется метод ksSetSpcObjectColumnText интерфейса ksSpecification. Вот прототип этого метода.

ksSetSpcObjectColumnText(

columnType: Integer; //Тип колонки, в которой меняется текст

ispoln: Integer;    //Номер исполнения

block: Integer;     //Номер блока исполнений

const str: WideString     //Строка с устанавливаемым тесктом

): Integer;

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

Тип колонки

Числовое значение1

Описание

SPC_CLM_FORMAT

1

Формат

SPC_CLM_ZONE*

2

Зона

SPC_CLM_POS*

3

Позиция

SPC_CLM_MARK

4

Обозначение

SPC_CLM_NAME

5

Наименование

SPC_CLM_COUNT

6

Количество

SPC_CLM_NOTE

7

Примечание

SPC_CLM_MASSA

8

Масса2

SPC_CLM_MATERIAL*

9

Материал

SPC_CLM_USER3

10

Пользовательская

SPC_CLM_KOD*

11

Код

SPC_CLM_FACTORY*

12

Предприятие-изготовитель

Звездочками в этой таблице отмечены колонки спецификации, заполнения которых с помощью метода ksSetSpcObjectColumnText мне так и не удалось добиться.

Назначение параметров ispoln и block не понятно. Но, экспериментальным путем удалось выяснить следующее.

Во-первых, метод ksSetSpcObjectColumnText не  работает, если значение параметра ispoln отлично от единицы.

Во-вторых, в большинстве случаев метод ksSetSpcObjectColumnText исправно работает вне зависимости от значения свойства block.

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

2          В случае заполнения массы параметр str должен строку с числом, иначе колонка не будет заполнена

3          На практике  заполняет колонку «Код ОКП» (тестировал на КОМПАС 8).

В-третьих, в редких случаях (например, при SPC_CLM_COUNT) метод ksSetSpcObjectColumnText не работает, если значение параметра block отлично от нуля.

Параметр str содержит строку,  которая  должна  быть  установлена  в

колонке. Имейте в виду, что при SPC_CLM_MASSA в этой строке должно быть число.

В случае успеха метод ksSetSpcObjectColumnText возвращает значение единица.

Заполнение отдельных колонок

Для заполнения колонки «Количество» может быть использован метод ksSpcCount нтерфейса ksSpecification. Вот прототип этого метода.

ksSpcCount(

ispoln: Smallint;        //Номер исполнения

const sCount: WideString //Строка с устанавливаемым текстом

): Integer;

Как показывает эксперимент, метод ksSpcCount работает только в том случае если значение параметра ispoln равно нулю или единице.

В случае успеха метод ksSpcCount возвращает значение 1.

Для заполнения колонки масса используется метод ksSpcMassa интерфейса ksSpecification. В качестве единственного параметра данный метод принимает строку с устанавливаемым числовым значением массы. В случае успеха метод ksSpcMassa возвращает значение 1, а в случае ошибки – значение нуль.

Для заполнения колонки «Позиция» используется метод ksSpcPosition интерфейса ksSpecification. В качестве единственного параметра данный метод  принимает числовое значение  устанавливаемой позиции.  Обращаю

ваше внимание на то, что он принимает именно числовое значение, а не его строковое представление (как, например, метод ksSpcCount или ksSpcMassa).

В случае успеха метод ksSpcPosition возвращает значение 1, а в случае ошибки – значение нуль.

Пример

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

const

SPC_CLM_FORMAT = 1;

SPC_CLM_NAME  = 5;

………………………………

var

kompas: KompasObject;

SpcDocument: ksSpcDocument; Specification: ksSpecification;

………………………………

begin

………………………………

//Получаем интерфейс ksSpecification

Specification:=ksSpecification(SpcDocument.GetSpecification());

//Cоздаем объект в разделе "Документация"

Specification.ksSpcObjectCreate(str,1,5,0,0,0);

//Заполняем колонку "Наименование"

Specification.ksSetSpcObjectColumnText(SPC_CLM_NAME,1,0,’Спецификация’);

//Заполняем колонку "Количество"

Specification.ksSpcCount(0,’1′);

//Закрываем объект в разделе "Документация"

Specification.ksSpcObjectEnd();

//Создаем объект в разделе "Детали"

Specification.ksSpcObjectCreate(str,1,20,0,0,0);

//Заполняем колонку "Наименование"

Specification.ksSetSpcObjectColumnText(SPC_CLM_NAME,1,0,’Крышка’);

//Заполняем колонку "Формат"

Specification.ksSetSpcObjectColumnText(SPC_CLM_FORMAT,1,0,’А3′);

//Заполняем колонку "Количество"

Specification.ksSpcCount(0,’2′);

//Заполняем колонку "Позиция"

Specification.ksSpcPosition(1);

//Заполняем колонку "Масса"

Specification.ksSpcMassa(’25’);

//Закрываем объект в разделе "Детали"

Specification.ksSpcObjectEnd();

kompas.Visible:=true;

end;

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

Масса  обычно  отображается  в  отдельном  окне  «Дополнительные колонки». Для объекта «Крышка» оно выглядит как на рисунке ниже.

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

По теме:

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