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

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

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

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

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

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

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

Чтения значения из штампа!

Автор podshibyakinea, 28.08.15, 14:28:11

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

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

podshibyakinea

Задача состоит в том чтобы прочитать с 32 ячейки (формат листов) значение.
Лоцман не формирует отчет, если в документе разный набор форматов листов.
Требуется привести все к одному формату (А1). Это уже реализовано макросами в Excel. [А1=1/А2=0.5/А3=0.25 и.т.д]
____
Написал тестовую библиотечку, чтобы считать значение хотябы из первой ячейки, вот что получается.

28.08.15, 14:34:59 #1 Последнее редактирование: 28.08.15, 15:14:39 от Sabahs
ISheetFormat.Format - Формат листа.
Тип данных: из перечисления ksDocumentFormatEnum.
http://forum.ascon.ru/index.php/topic,23070.msg160244.html#msg160244

podshibyakinea

В DSK есть пример по ISheetFormat ?
Как его примеить? В файлах ksDocumentFormatEnum нашел, это не одно и тоже?


var
pDocument:IKompasDocument;
pLayoutSheets:ILayoutSheets;
pLayoutSheet:ILayoutSheet;
pSheetFormat:ISheetFormat;
...
pLayoutSheets:=pDocument.LayoutSheets;
if pLayoutSheets<>nil then
begin
    pLayoutSheet:=pLayoutSheets.Item[0];
    if pLayoutSheet<>nil then
     begin
        pSheetFormat:=pLayoutSheet.Format;
        if pSheetFormat<>nil then
         begin
            if pSheetFormat.Format=ksFormatA0 then iKompas.ksMessage('Формат А0')
             else if pSheetFormat.Format=ksFormatA1 then iKompas.ksMessage('Формат А1')
              else if pSheetFormat.Format=ksFormatA2 then iKompas.ksMessage('Формат А2')
               else if pSheetFormat.Format=ksFormatA3 then iKompas.ksMessage('Формат А3')
                else if pSheetFormat.Format=ksFormatA4 then iKompas.ksMessage('Формат А4')
                 else if pSheetFormat.Format=ksFormatA5 then iKompas.ksMessage('Формат А5')
                  else if pSheetFormat.Format=ksFormatUser then iKompas.ksMessage('Пользовательский Формат ');
            ....
         end;
     end;
end;

podshibyakinea

Спасибо за последний пример!  :)
В чем отличия от I и KS. Почему в моем проекте интерфейс I не видит ?

p.s в первой строчке можно заменить i на ks, процедуру видит. что делать с остальными?

28.08.15, 15:42:08 #5 Последнее редактирование: 28.08.15, 19:20:38 от Sabahs
 I - API7
ks - API5

В данном случае нужно использовать API7, а не менять, нет в API5 таких интерфейсов, т.к. они появились в V8.
PS. Чтобы видел, нужно подключить ksAPI7.pas, как минимум.

podshibyakinea

После второго сообщения вылетает Компас. Не дружит с  pDocument:IKompasDocument;


  • var 
      iKompas: KompasObject;
      iDocument2D: ksDocument2D;
      iDocumentParam: ksDocumentParam;
      iStamp: ksStamp;
      iViewParam: ksViewParam;
      iTextItemParam: ksTextItemParam;
      iTextItemFont: ksTextItemFont;
      n: integer;
      scale: Double;
      f:variant;

       pDocument:IKompasDocument;
       pLayoutSheets:ILayoutSheets;
       pLayoutSheet:ILayoutSheet;
       pSheetFormat:ISheetFormat;


  •       ShowMessage('1');
      pDocument :=IKompasDocument(iKompas.ActiveDocument2D );
          ShowMessage('2');
          pLayoutSheets:=pDocument.LayoutSheets;
          ShowMessage('3');

31.08.15, 13:42:30 #7 Последнее редактирование: 31.08.15, 15:12:07 от Sabahs
И правильно делает.
http://forum.ascon.ru/index.php/topic,27126.msg201600.html#msg201600


var
Disp:IDispatch;
KompasApi:IApplication;
Document:IKompasDocument;
...
Disp:=IDispatch(CreateKompasApplication);
KompasApi:=Disp as IApplication; // API7
if KompasApi<>nil then pDocument:=KompasApi.ActiveDocument;
if pDocument<>nil then ...
+ Благодарностей: 1

oit

вылет после второго сообщения, потому что перемешали интерфейсы API5 и API7.

посмотрите внимательно на iKompas
+ Благодарностей: 1

podshibyakinea

Спасибо! Из-за многократного тестирования библиотеки, напутал в переменных. Привел все в порядок. Работает!
Но остался вопрос, что делать с кратностью листов? Например формат А2х4 - в сообщении показывает как просто А2

SDK, лень посмотреть?
ISheetFormat.FormatMultiplicity - кратность формата листа.

podshibyakinea

Благодарен всем за помощь. Все работает как надо.
Осталось прикрутить все это  дело к SQL и подсчитывать КД в едином формате.

podshibyakinea

Зря пошел таким путем. Информацию можно было получить из атрибутов Лоцмана, и дальше обрабатывать.
Подсказала поддержка Аскона.