• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Создание 2-х документов в Компасе

Автор Борис_С, 11.09.18, 15:58:52

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Борис_С

Добрый день! Господа, программисты, нужна ваша помощь.
Хочу создать 2 документа в Компасе.
Создание одного документа работает.
Написал такой же код для создания второго.
Компас запускается, но при переходе с одного документа на другой (во 2-ой раз) программа прекращает работу.
Вот код программы:

var
  Form1: TForm1;
  kompas: KompasObject;
  Document2D_1, Document2D_2: ksDocument2D;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  DocumentParam1: ksDocumentParam;
  DocumentParam2: ksDocumentParam;
  //Document2D_1, Document2D_2: ksDocument2D;
  SheetPar1, SheetPar2: ksSheetPar;
  StandartSheet1, StandartSheet2: ksStandartSheet;
  RectangleParam: KsRectangleParam;
  SheetSize: ksSheetSize;
  HeightSheet, WidthSheet: Double;
  MarginTop, MarginLeft, MarginRight, MarginBottom: Integer;  // поля листа
  Line, Year, Month, Day, ListSize, SelBegHour, SelBegMin, SelBegDay: word;
  str, TypeGraph, OddEven: string;
begin
  try
    Screen.Cursor := crHourGlass;
    kompas:=KompasObject(CreateOleObject('Kompas.Application.5'));
    DocumentParam1 := ksDocumentParam(kompas.GetParamStruct(ko_DocumentParam));
    DocumentParam1.Init();
    DocumentParam1.type_ := ksDocumentDrawing; //lt_DocSheetStandart; //Тип: чертеж
    DocumentParam1.regime := 0;//видимый режим редактирования

    //Получаем интерфейс параметров оформления
    SheetPar1:=ksSheetPar(DocumentParam1.GetLayoutParam());
    //Формируем путь к библиотеке оформления
    str:= kompas.ksSystemPath(0)+'\graphic.lyt';
    SheetPar1.layoutName := str;
    SheetPar1.shtType := 13; //оформление (без внутренней рамки)

    //Получаем интерфейс параметров стандартного листа
    StandartSheet1:=ksStandartSheet(SheetPar1.GetSheetParam());
    StandartSheet1.format:=1;      //формат A1
    StandartSheet1.direct:=true;   //горизонтальное направление листа
    StandartSheet1.multiply:=1;    //масштаб

    Document2D_1:=ksDocument2D(kompas.Document2D); //Получаем интерфейс документа
    Document2D_1.ksCreateDocument(DocumentParam1);  //Создаем документ

    DocumentParam2 := ksDocumentParam(kompas.GetParamStruct(ko_DocumentParam));
    DocumentParam2.Init();
    DocumentParam2.type_ := ksDocumentDrawing; //lt_DocSheetStandart; //Тип: чертеж
    DocumentParam2.regime := 0;//видимый режим редактирования

    //Получаем интерфейс параметров оформления
    SheetPar2:=ksSheetPar(DocumentParam2.GetLayoutParam());
    //Формируем путь к библиотеке оформления
    str:= kompas.ksSystemPath(0)+'\graphic.lyt';
    SheetPar2.layoutName := str;
    SheetPar2.shtType := 13; //оформление (без внутренней рамки)

    //Получаем интерфейс параметров стандартного листа
    StandartSheet2:=ksStandartSheet(SheetPar2.GetSheetParam());
    StandartSheet2.format:=1;      //формат A1
    StandartSheet2.direct:=true;   //горизонтальное направление листа
    StandartSheet2.multiply:=1;    //масштаб

    Document2D_2:=ksDocument2D(kompas.Document2D); //Получаем интерфейс документа
    Document2D_2.ksCreateDocument(DocumentParam2);  //Создаем документ

    kompas.Visible:=true;
    Screen.Cursor := crDefault;
  except
    on e:Exception do
    begin
       Screen.Cursor := crDefault;
       Application.MessageBox(PChar(e.message), 'ERROR', MB_OK OR MB_ICONERROR);
       Application.Terminate;
       exit
    end;
  end;
end;

Подскажите, где я не прав?

#1
kompas:=KompasObject(CreateOleObject('Kompas.Application.5'));
Где он потом выгружается?
Application.Terminate; - Это вообще жесть.
Пример посмотрите c:\Program Files\ASCON\KOMPAS-3D v17\SDK\Samples\Pascal\DELPHIAUTO\ksContrl.
+ Благодарностей: 2

Борис_С

Не понял.
В этой процедуре kompas создается 1 раз и в ней же создаются 2 документа.

Борис_С

Это тестовый пример. Компас я выгружаю вручную.

Борис_С

Разобрался.
Мой код и код примера практически идентичны.
Разница только в одном: я устанавливаю свойство kompas.Visible=true после создания документа,
а в примере - сразу после инициализации kompas.
По-моему это явная ошибка разработчиков.
Подскажите, пожалуйста, как можно написать разработчикам об их ошибках и насколько оперативно они исправляются?

В невидимом режиме не все функции обрабатываются, особенно с прорисовкой окон, т.к. рисовать нечего.
Писать можно в СТП - https://support.ascon.ru/request/.
+ Благодарностей: 1

Борис_С

Т.е., в личном кабинете?
А разработчики программы читают сообщения форума?

Читают, но поддержка осуществляется через СТП в личном кабинете, на поддержку по Компас-Мастер нужна отдельная лицензия.
Описание примеров и интерфейсов читайте в SDK идет с дистрибутивом Компас-3D.
+ Благодарностей: 2