Заполнить штамп(основную надпись) в спецификации (Delphi)

Автор ufimec, 01.07.13, 12:59:46

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

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

ufimec

Здравствуйте, уважаемые посетители форума.

Я сразу прошу прощения, если данная тема уже существовала, но при поиске я ее не нашел.

Вопрос такой, как при помощи API 5 на Delphi внести данные в заданные ячейки основной надписи спецификации.
Пытаюсь я это сделать так же как в чертеже. Здесь параллельно рассматривается вариант при изменении штампа для чертежа и спецификации. Для чертежа все работает,а для спецификации нет.
вот код:

Kompas.Visible:=true;
      if typeDoc='Спецификация' then
        spec:= ksSpcDocument(Kompas.SpcDocument)
      else doc := ksDocument2D( Kompas.Document2D );
      if ((doc <> nil) or (spec<>nil)) then
        if not FileExists(filePath) then ShowMessage('Файл не найден по уакзанному адресу');
        if typeDoc='Спецификация' then begin
          if(not spec.ksOpenDocument(filePath, 3)) then ShowMessage('Не Привязали'); end
        else
          if(not doc.ksOpenDocument(filePath, false)) then ShowMessage('Не Привязали');
        if typeDoc='Спецификация' then stamp := ksStamp(spec.GetStamp()) else stamp := ksStamp(doc.GetStamp());
        if ( stamp <> nil ) then begin
          if ( stamp.ksOpenStamp <> 0 ) then begin
            itemParam := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam) );
            if ( itemParam <> nil ) then begin
              itemParam.Init;
              itemFont := ksTextItemFont(itemParam.GetItemFont );
              if (itemFont <> nil ) then begin
                itemFont.SetBitVectorValue( NEW_LINE, true );
                finish:=true;
                 if typeDoc='Спецификация' then J:=140 else J:=140;
                while(finish) do
                Begin
                  stamp.ksColumnNumber(J);
                  ksArray := ksDynamicArray(stamp.ksGetStampColumnText(J));
                  ksArray.ksGetArrayItem(0, itemLineText);
                  items := ksDynamicArray( itemLineText.GetTextItemArr() );
                  item := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam) );
                  item.Init();
                  count := items.ksGetArrayCount();
                  if(count=0) then
                  begin
                    ShowMessage('начнем ввод');
                    itemParam.s := IntToStr(J-138);
                    if typeDoc='Спецификация' then stamp.ksTextLine( itemParam ) else stamp.ksTextLine( itemParam );
                    stamp.ksColumnNumber(J+10);
                    itemParam.s := 'Изм';
                    if typeDoc='Спецификация' then stamp.ksTextLine( itemParam ) else stamp.ksTextLine( itemParam );
                    stamp.ksColumnNumber(J+20);
                    itemParam.s := stDivision+'-'+stSerialJournalNumber;
                    if typeDoc='Спецификация' then stamp.ksTextLine( itemParam ) else stamp.ksTextLine( itemParam );
                    stamp.ksColumnNumber(J+40);
                    itemParam.s := FormatDateTime('dd.mm.yyyy', Now());
                    if typeDoc='Спецификация' then stamp.ksTextLine( itemParam ) else stamp.ksTextLine( itemParam );
                    finish:=false;
                  end;
                  items.ksGetArrayItem( 0, item );
                  itemFont := ksTextItemFont( item.GetItemFont() );
                  items.ksDeleteArray;
                  ksArray.ksDeleteArray;
                  J:=J+1;
                  if(J=144) then finish:=false;
                End;
              end;
            end;
            stamp.ksCloseStamp;
            if typeDoc='Спецификация' then spec.ksSaveDocument('') else doc.ksSaveDocument('');


Буду очень признателен за помощь. Благодарю заранее!

yarikv

iTextItemParam:=ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));

iSpcDoc:=ksSpcDocument(iKompas.SpcActiveDocument);
if iSpcDoc = nil then Exit;

iStamp:=ksStamp(iSpcDoc.GetStamp);
iStamp.ksOpenStamp;
iStamp.ksColumnNumber(1);

iTextItemParam.s:='1';

iStamp.ksTextLine(iTextItemParam);

iStamp.ksColumnNumber(2);

iTextItemParam.s:='2';

iStamp.ksTextLine(iTextItemParam);

iStamp.ksCloseStamp;