Заполнение штампа графы материал.

Автор graphdark, 23.08.21, 13:13:41

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

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

graphdark

Заполняю таким кодом.
Function recStamp(colNumb: integer; str: string): boolean;
var
Doc2D: ksDocument2D;
TextItemParam: ksTextItemParam;
Stamp: ksStamp;
pathNew: string;
begin
  pathNew := Form1.FileSaveDialog1.FileName;
  pathNew := StringReplace(pathNew, 'm3d','cdw',[rfReplaceAll, rfIgnoreCase]);
  Doc2d := ksDocument2D(Form1.kompas.Document2D);
  Doc2D.ksOpenDocument(pathNew, true);
  Stamp := ksStamp(Doc2D.GetStamp());
  TextItemParam := ksTextItemParam(Form1.kompas.GetParamStruct(ko_TextItemParam));
  Stamp.ksOpenStamp();
  Stamp.ksColumnNumber(ColNumb);
  TextItemParam.s := str;
  Stamp.ksTextLine(TextItemParam);
  Stamp.ksCloseStamp();
  Doc2D.ksSaveDocument(pathNew);
  Doc2D.ksCloseDocument;
end;

Для ColNumb 3 отрабатывает только в 18. В 17 нет. Где я не прав?

На апи7 тоже пробовал.

  sheets := pDocument.LayoutSheets;
  sheet := sheets.Item[0];
  stamp := sheet.Stamp;
  stampText := stamp.Text[3];
  stampText.Clear;
  StampText.Str := '1:'+IntToStr(Round(1/Form1.scale));
  Stamp.Update;

graphdark

Проблему решил, но костыльно. Начал просто гадать и пробовать вызывать функцию в разных точках кода. Сначала попробовал вообще чистый проект, не связаный ни с чем чистый чертеж, не сработало. У меня по коду перестраивается модель и по перестроенной модели рисуется чертеж.
После сохранения и закрытия всех документов, вызвал функцию и в 3х из 4х случаев она сработала в 17. С чем связано, не понял. Материал в модели не прописан. В одном случае было, что материал в штампе был до перестроения. В общем отправил тикет в ТП, ответ сюда выложу.

graphdark

В общем sdk поддержка отдельно и платно. Вот на мое костыльное решение сослались.


graphdark

Цитата: Sabahs от 30.08.21, 08:25:46Где LayoutSheet.Update;
  sheets := pDocument.LayoutSheets;
  sheet := sheets.Item[0];
  stamp := sheet.Stamp;
  stampText := stamp.Text[3];
  stampText.Clear;
  StampText.Str := '1:'+IntToStr(Round(1/Form1.scale));
  Stamp.Update;
  Sheet.Update
Хрен редьки не многим слаще.

Вы точно материал заполняете?
StampText.Str := '1:'+IntToStr(Round(1/Form1.scale)); - больше на масштаб похоже.

graphdark

Цитата: Sabahs от 30.08.21, 15:24:10ampText.Str := '1:'+IntToStr(Round(1/Form1.scale)); - больше на масштаб похоже.
Просто рабочий кусок для пробы дернул. В нем как раз формировалась надпись масштаба. Собственно код без Sheet.Update отлично заполняет любую графу, кроме 3. Да ваш же код, где-то на форуме давно нашел. И этот же код отлично заполняет 3 графу в 18, 19. 20 не проверил. В фирме на работе куплен 17. У меня есть хомка 19. Сделал 2 запроса в ТП. 1 от себя, второй от фирмы. Итог для фирмы дали мои координаты, чтобы я решение подсказал.

Все зависит от стиля оформления, в каждом ячейки могут быть абсолютно разными.
Таких глюков, как у Вас у меня нет, все заполняет, туда куда надо.

graphdark

Цитата: Sabahs от 30.08.21, 16:00:07Все зависит от стиля оформления, в каждом ячейки могут быть абсолютно разными.
Таких глюков, как у Вас у меня нет, все заполняет, туда куда надо.
Вы тоже на delphi или в лазарусе? Вы тоже в 17 пробовали?