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

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

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

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

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

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

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

Не откомпеллировать приложение

Автор Борис_С, 06.09.18, 17:12:33

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

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

Борис_С

Прошу прощения за глупый вопрос, но я делаю первые шаги в освоении Компас-API
Пишу свою первую программу.

procedure TForm1.Button1Click(Sender: TObject);
var
  DocumentParam: ksDocumentParam;
  Document2D: ksDocument2D;
  SheetOptions: ksSheetOptions;
  StahdartSheet: ksStandartSheet;
begin
  try
    kompas:=KompasObject(CreateOleObject('Kompas.Application.5'));
    DocumentParam := ksDocumentParam(kompas.GetParamStruct(ko_DocumentParam));
    DocumentParam.Init();
    DocumentParam.type_ := ksDocumentDrawing; //lt_DocSheetStandart; //Тип: чертеж
    //Получаем интерфейс документа
    Document2D:=ksDocument2D(kompas.Document2D);
    //Создаем новый чертеж
    Document2D.ksCreateDocument(DocumentParam);

    //Получаем интерфейс ksSheetOptions
    SheetOptions:=ksSheetOptions(kompas.GetParamStruct(ko_SheetOptions));
    //Получаем текущие параметры чертежа
    Document2D.ksGetDocOptions(SHEET_OPTIONS_EX, SheetOptions);
    //Мы работаем с листом стандартного размера
    SheetOptions.sheetType:=false;

    //Поучаем интерфейс ksStandartSheet
    StandartSheet:=ksStandartSheet(SheetOptions.GetSheetParam(false));
    //Устанавливаем лист формата A1
    StandartSheet.format:=1;
    //Устанавливаем горизонтальное направление листа
    StandartSheet.direct:=true;
    //Устанавливаем кратность равную единице
    StandartSheet.multiply:=1;
    //Устанавливаем новые настройки чертежа
    Document2D.ksSetDocOptions(SHEET_OPTIONS_EX, SheetOptions);
    kompas.Visible:=true;
  except
    on e:Exception do
      begin
         Application.MessageBox(PChar(e.message), 'ERROR', MB_OK OR MB_ICONERROR);
         Application.Terminate;
         exit
      end;
    end;
end;

На операторе
StandartSheet:=ksStandartSheet(SheetOptions.GetSheetParam(false)); получаю сообщение об ошибке:
Incompatible types: TGUID and ksStandartSheet

Вроде все делаю по книжке. Подскажите, пожалуйста, в чем тут дело?
Спасибо.

#1
Посмотрите примеры в папке c:Program FilesASCONKOMPAS-3D v18SDKSamplesPascal
Там есть справка.
В чём необходимость приложения?
Лучше писать библиотеку, работать будет быстрее и в одном адресном пространстве с Компасом.
Проверки, что интерфейсы получены, тоже не помешают.


В качестве ориентира.

KompasApi:= KompasObject( CreateOleObject('Kompas.Application.5') );
Doc:=ksDocument2D(kompasApi.Document2D);
DocPar:=ksDocumentParam(KompasApi.GetParamStruct(ko_DocumentParam));
S:=Copy(Application.ExeName,1,Length(Application.ExeName)-3)+'frw';
DocPar.FileName:=S;
DocPar.comment:='Генератор программ на обработку крановых колес';
DocPar.author:='Мельник Б.Н.';
DocPar.type_:=lt_DocFragment;
DocPar.regime:=0;
Doc.ksCreateDocument(DocPar);

Борис_С

Мне нужно установить размер листа. Как это сделать, не используя интерфейс ksStandartSheet?
Я не знаю. Значит нужно как-то достучаться до этого интерфейса.
Как?