Здравствуйте! Спасибо огромное тому, кто выложил примерчик для чтения штампа, но при вставке этого кода в моё внешнее приложения он отказывается работать. Вот код:
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???
Разобрался. В чём ошибка была ужене помню. Вот функция, которая показывает форму редактирования штампа:
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;
Кто-нибудь подскажет как укоротить эту функцию? Может в массив номера ячеек, а потом циклом подставлять? Попробовал - не получилось. Конфликт переменных (numb)...