Чтение штампа из внешнего приложения

Автор sorockinalex, 20.11.07, 21:15:53

« предыдущая - следующая »

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

sorockinalex

Здравствуйте! Спасибо огромное тому, кто выложил примерчик для чтения штампа, но при вставке этого кода в моё внешнее приложения он отказывается работать. Вот код:
if iKompas.ksReadInt('Укажите номер ячейки основной надписи', 1, 1, 231, numb) = 1 then
begin
   iDoc:=ksDocument2D(iKompas.ActiveDocument2D);
  iKompas:= KompasObject(GetActiveOleObject('Kompas.Application.5'));
   iStamp:=ksStamp(iDoc.GetStamp);
   iStamp.ksOpenStamp;
   iStamp.ksColumnNumber(numb);
   iTextLineParam:=ksTextLineParam(iKompas.GetParamStruct(29)); //29=ko_TextLineParam
   iTextItemParam:=ksTextItemParam(iKompas.GetParamStruct(30)); //30=ko_TextItemParam
   iTextLineDynamicArray:=ksDynamicArray(iStamp.ksGetStampColumnText(numb));
   iTextLineDynamicArray.ksGetArrayItem(0, iTextLineParam);
   iTextItemDynamicArray:=ksDynamicArray(iTextLineParam.GetTextItemArr());
   iTextItemDynamicArray.ksGetArrayItem(0, iTextItemParam);
   iStamp.ksCloseStamp;
   iKompas.ksMessage(iTextItemParam.s);
end;


Разнича лишь в том, как определяются iDoc и iKompas
В чём разница? Почему не работает? Из-за Ole???

sorockinalex

Разобрался. В чём ошибка была ужене помню. Вот функция, которая показывает форму редактирования штампа:

function ShowEditStampForm (iKompas:KompasObject;iDoc:ksDocument2D):Reference;
var
  idocParams : ksDocumentParam;
  iStamp: ksStamp;
  iTextLineDynamicArray, iTextItemDynamicArray:  ksDynamicArray;
  iTextLineParam: ksTextLineParam;
  iTextItemParam: ksTextItemParam;
  numb:integer;
begin
  Form3:=TForm3.Create(Forms.Application);
  iKompas:= KompasObject(GetActiveOleObject('Kompas.Application.5'));
  iDoc := ksDocument2D ( iKompas.ActiveDocument2D );
  iDocParams := ksDocumentParam (iKompas.GetParamStruct (35));
  iDoc.ksGetObjParam(iDoc.reference, iDocParams, ALLPARAM);
  iStamp:=ksStamp(iDoc.GetStamp);
  iStamp.ksOpenStamp;
  numb:=1;
  iStamp.ksColumnNumber(numb);
  iTextLineParam:=ksTextLineParam(iKompas.GetParamStruct(ko_TextLineParam));
  iTextItemParam:=ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));
  iTextLineDynamicArray:=ksDynamicArray(iStamp.ksGetStampColumnText(numb));
  iTextLineDynamicArray.ksGetArrayItem(0, iTextLineParam);
  iTextItemDynamicArray:=ksDynamicArray(iTextLineParam.GetTextItemArr());
  iTextItemDynamicArray.ksGetArrayItem(0, iTextItemParam);
  if (iDocParams.comment<>'') and (iTextItemParam.s='')then Form3.Edit2.Text:=iDocParams.comment else Form3.Edit2.Text:=iTextItemParam.s;
  WriteIni ('Form3','NaimenovanieIzdeliya',iTextItemParam.s);
  numb:=2;
  iStamp.ksColumnNumber(numb);
  iTextLineParam:=ksTextLineParam(iKompas.GetParamStruct(ko_TextLineParam));
  iTextItemParam:=ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));
  iTextLineDynamicArray:=ksDynamicArray(iStamp.ksGetStampColumnText(numb));
  iTextLineDynamicArray.ksGetArrayItem(0, iTextLineParam);
  iTextItemDynamicArray:=ksDynamicArray(iTextLineParam.GetTextItemArr());
  iTextItemDynamicArray.ksGetArrayItem(0, iTextItemParam);
  Form3.Edit1.Text:=iTextItemParam.s;
  WriteIni ('Form3','OboznachenieDocumenta',iTextItemParam.s);
  numb:=3;
  iStamp.ksColumnNumber(numb);
  iTextLineParam:=ksTextLineParam(iKompas.GetParamStruct(ko_TextLineParam));
  iTextItemParam:=ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));
  iTextLineDynamicArray:=ksDynamicArray(iStamp.ksGetStampColumnText(numb));
  iTextLineDynamicArray.ksGetArrayItem(0, iTextLineParam);
  iTextItemDynamicArray:=ksDynamicArray(iTextLineParam.GetTextItemArr());
  iTextItemDynamicArray.ksGetArrayItem(0, iTextItemParam);
  Form3.Edit3.Text:=iTextItemParam.s;
  WriteIni ('Form3','OboznachenieMateriala',iTextItemParam.s);
  numb:=110;
  iStamp.ksColumnNumber(numb);
  iTextLineParam:=ksTextLineParam(iKompas.GetParamStruct(ko_TextLineParam));
  iTextItemParam:=ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));
  iTextLineDynamicArray:=ksDynamicArray(iStamp.ksGetStampColumnText(numb));
  iTextLineDynamicArray.ksGetArrayItem(0, iTextLineParam);
  iTextItemDynamicArray:=ksDynamicArray(iTextLineParam.GetTextItemArr());
  iTextItemDynamicArray.ksGetArrayItem(0, iTextItemParam);
  if (iDocParams.author<>'') and (iTextItemParam.s='')then Form3.Edit5.Text:=iDocParams.author else Form3.Edit5.Text:=iTextItemParam.s;
  WriteIni ('Form3','Razrab',iTextItemParam.s);
  numb:=111;
  iStamp.ksColumnNumber(numb);
  iTextLineParam:=ksTextLineParam(iKompas.GetParamStruct(ko_TextLineParam));
  iTextItemParam:=ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));
  iTextLineDynamicArray:=ksDynamicArray(iStamp.ksGetStampColumnText(numb));
  iTextLineDynamicArray.ksGetArrayItem(0, iTextLineParam);
  iTextItemDynamicArray:=ksDynamicArray(iTextLineParam.GetTextItemArr());
  iTextItemDynamicArray.ksGetArrayItem(0, iTextItemParam);
  Form3.Edit6.Text:=iTextItemParam.s;
  WriteIni ('Form3','Prov',iTextItemParam.s);
  numb:=112;
  iStamp.ksColumnNumber(numb);
  iTextLineParam:=ksTextLineParam(iKompas.GetParamStruct(ko_TextLineParam));
  iTextItemParam:=ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));
  iTextLineDynamicArray:=ksDynamicArray(iStamp.ksGetStampColumnText(numb));
  iTextLineDynamicArray.ksGetArrayItem(0, iTextLineParam);
  iTextItemDynamicArray:=ksDynamicArray(iTextLineParam.GetTextItemArr());
  iTextItemDynamicArray.ksGetArrayItem(0, iTextItemParam);
  Form3.Edit7.Text:=iTextItemParam.s;
  WriteIni ('Form3','TKontr',iTextItemParam.s);
  numb:=113;
  iStamp.ksColumnNumber(numb);
  iTextLineParam:=ksTextLineParam(iKompas.GetParamStruct(ko_TextLineParam));
  iTextItemParam:=ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));
  iTextLineDynamicArray:=ksDynamicArray(iStamp.ksGetStampColumnText(numb));
  iTextLineDynamicArray.ksGetArrayItem(0, iTextLineParam);
  iTextItemDynamicArray:=ksDynamicArray(iTextLineParam.GetTextItemArr());
  iTextItemDynamicArray.ksGetArrayItem(0, iTextItemParam);
  Form3.Edit8.Text:=iTextItemParam.s;
  WriteIni ('Form3','Prinyal2',iTextItemParam.s);
  numb:=114;
  iStamp.ksColumnNumber(numb);
  iTextLineParam:=ksTextLineParam(iKompas.GetParamStruct(ko_TextLineParam));
  iTextItemParam:=ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));
  iTextLineDynamicArray:=ksDynamicArray(iStamp.ksGetStampColumnText(numb));
  iTextLineDynamicArray.ksGetArrayItem(0, iTextLineParam);
  iTextItemDynamicArray:=ksDynamicArray(iTextLineParam.GetTextItemArr());
  iTextItemDynamicArray.ksGetArrayItem(0, iTextItemParam);
  Form3.Edit9.Text:=iTextItemParam.s;
  WriteIni ('Form3','NKontr',iTextItemParam.s);
  numb:=115;
  iStamp.ksColumnNumber(numb);
  iTextLineParam:=ksTextLineParam(iKompas.GetParamStruct(ko_TextLineParam));
  iTextItemParam:=ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));
  iTextLineDynamicArray:=ksDynamicArray(iStamp.ksGetStampColumnText(numb));
  iTextLineDynamicArray.ksGetArrayItem(0, iTextLineParam);
  iTextItemDynamicArray:=ksDynamicArray(iTextLineParam.GetTextItemArr());
  iTextItemDynamicArray.ksGetArrayItem(0, iTextItemParam);
  Form3.Edit10.Text:=iTextItemParam.s;
  WriteIni ('Form3','Utv',iTextItemParam.s);
  iStamp.ksCloseStamp;


//  iDocParams := ksDocumentParam (iKompas.GetParamStruct (ko_DocumentParam ));
//  iDoc.ksGetObjParam(iDoc.reference, iDocParams, ALLPARAM);
//  author_var:= iDocParams.author;
//  comment_var := iDocParams.comment;
//  Forms.Application.Handle:=iKompas.ksGetHWindow;
//  iKompas.ksEnableTaskAccess(0);

//  Form3.Edit5.Text:=author_var;
If (ReadIni ('Form3','HorizontalPosition')<>'NotExist') and (ReadIni ('Form3','HorizontalPosition')<>'') then Form3.Left:=strtoint(ReadIni ('Form3','HorizontalPosition'));
If (ReadIni ('Form3','VerticalPosition')<>'NotExist') and (ReadIni ('Form3','VerticalPosition')<>'NotExist') then Form3.Top:=strtoint(ReadIni ('Form3','VerticalPosition'));
If (ReadIni ('Form3','Prinyal')<>'NotExist') and (ReadIni ('Form3','Prinyal')<>'') then Form3.CheckBox1.Checked:=strtobool(ReadIni ('Form3','Prinyal'));
  Form3.ShowModal;
  Form3.Free;
  iKompas.ksEnableTaskAccess(1);
  Forms.Application.Handle:=0;
  iKompas:= KompasObject(GetActiveOleObject('Kompas.Application.5'));
  SetForegroundWindow (iKompas.ksGetHWindow);
  if resultat=0 then Result:=0 else Result:=1;
end;

sorockinalex

Кто-нибудь подскажет как укоротить эту функцию? Может в массив номера ячеек, а потом циклом подставлять? Попробовал - не получилось. Конфликт переменных (numb)...