Заполнение штампа

Автор Godzilla, 06.05.05, 16:56:52

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

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

Godzilla

При заполнении штампа техт в ячейках располагается выровненным по центру. Можно ли каким-нибудь образом настраивать выравнивание в нужной ячейки.
Делаю так:
ksStamp shtamp;  
shtamp = doc.GetStamp();

ksTextItemParam ItemParam = kompas.GetParamStruct(ko_TextItemParam);

ItemParam.Init();
ksTextItemFont ItemFont = ItemParam.GetItemFont();
ItemFont.SetBitVectorValue(ITALIC_ON,TRUE);

shtamp.ksOpenStamp();

   for (int i = 0; i < 200; i++)
   {
      shtamp.ksColumnNumber(i);

      char buf[128];
      sprintf(buf,"%d",i);

      ItemParam.SetS(buf);

      shtamp.ksTextLine(ItemParam);

   }
Может надо как-то использовать интерфейс ksTextStyleParam, но как его здесь использовать не пойму.

333

Нужно использовать функцию ksSetTextLineAlign
if (::OpenStamp()) {
    ::ColumnNumber(2);
   int oldAlign  ::ksSetTextLineAlign(0); // выравнивание текста по левому краю
    ::TextLine(NEW_LINE, 0, 0 , "1111111");
   ::ksSetTextLineAlign(oldAlign); // восстановить старое выравнование
    ::CloseStamp();
  }

Godzilla

Нельзя ли пояснить откуда взялась функция ksSetTextLineAlign.
В интерфейсе ksStamp в версиии 5.11 такой функции нет, может она есть в более новых версиях?

Моskviсh

нужно добавить перед
shtamp.ksTextLine(ItemParam);
следующую строку
doc.ksSetTextLineAlign(Al);
Вместо Аl присвоить поставить нужное:
0 - вырвнивание по левому краю
1 - по середине;
2 - по правому краю;
3 - по заполнению


shtamp.ksTextLine(ItemParam);

Моskviсh

нужно добавить перед
shtamp.ksTextLine(ItemParam);
следующую строку
doc.ksSetTextLineAlign(Al);
Вместо Аl поставить нужное:
0 - вырвнивание по левому краю
1 - по середине;
2 - по правому краю;
3 - по заполнению

Godzilla

Я попробовал ничего не получается, помоему это работает только для текстовой строки в документе, а не в штампе.

artemy

Итак, чтобы не создавать новую тему, задам очередной вопрос здесь.

Как программными средствами написать в графе "Наименование" (да, собственно, и в любой другой) штампа текст в две строки, разным кеглем, с заданным шагом строк; да так, чтобы первая строка была выровнена по левому краю, а вторая - по правому.

Что я могу сейчас: написать в две строки разным кеглем и выровнять по любому краю, но сразу весь текст. Отсюда главные вопросы: как разные строки выравнивать по разным краям и как задавать шаг строк.

Шаг строк есть в ksTextStyleParam, но как его прикрутить к тексту штампа я пока не разобрался.

Всем заранее спасибо.

Sabahs

Использовать интерфейс IText и для каждой строки ITextLine, устанавливать нужное значение свойства Align.

artemy

Спасибо, только я забыл упомянуть, что мне необходимо работать через api5, т.е. не используя интерфейс IStamp (ограничение версии компаса, для которой программа).

Дмитрий22

При заполнении штампа текстовых документов(*.kdw) програмным путем столкнулся с проблемой. Для того, чтобы отобразилась информация в штампе нужно принудительно еще раз войти в штамп. Причем, при заполнении штампа спецификаций и чертежей информация появляется сразу. Кто нибудь знает, какая функция перерисовывает штамп? Функцию перерисовки чертежа нашел, но она здесь не работает.

Sabahs

07.12.13, 12:47:22 #10 Последнее редактирование: 07.12.13, 12:59:58 от Sabahs
Попробуйте функции:OpenStampEx и CloseStamp.
Если штамп заполнялся через API7, обязательно нужно выполнять метод IStamp::Update.

Дмитрий22

OpenStampEx и CloseStamp также не перерисовывают штамп в *.kdw документах, только в чртежах и спецификациях . Через API7 не удалось попробовать, линкер ругается на объектный файл. Вообще, сложилось ощущение, что API для работы с *.kdw документами недоработанное, какое-то. Выяснилось, что декомпозировать документ *.kdw на составляющие объекты функцией DecomposeObj нельзя. Можно только графические документы и спецификацию, а жаль.

Sabahs

На, что или на кого ругаются.
DecomposeObj, я давно не пользуюсь, тормоз перестройки, ещё тот.

Дмитрий22

Ругается, что функцию CreateKompasObject не может найти в объектном файле.
А какой пользуетесь?

Sabahs


Дмитрий22

Перерисовку штампа другим способом вроде победил. Получаю дискриптор окна и перерисовываю его, как ни странно, штамп тоже перерисовывается как надо. По поводу перехода на API7, буду разбираться, как и с способами разбиения - заменой ksDecomposeObj на ksDestroyObjects. Спасибо.

Sabahs

14.12.13, 15:22:36 #16 Последнее редактирование: 14.12.13, 16:09:38 от Sabahs
Можно попробовать обновить изображение:
- KompasApi7.ExecuteKompasCommand(ksCMRefresh,False);
- KompasApi5.ksExecuteKompasCommand(ksCMRefresh,False);


Дмитрий22

Не подскажете, как все-таки ЗАПИСАТЬ в колонку штампа текст через API 7? Считать получилось через свойство Text класса IStamp, но оно только для чтения. Через API 5 могу, но хотелось бы через API 7.

Sabahs

 StampText:=Value.Text[1]; // Наименование
  if StampText<>nil then
   begin
     StampText.Clear;
     StampText.Str:='Naimenovanie';
     Value.Update;
   end;

Дмитрий22

Спасибо, Sabahs, помог. На С# это будет выглядеть так:


         Stamp1.Clear(1);
         Stamp1.Text[1].Str = "Наименование";
         Stamp1.Update();

Странно, почему тогда в справке написано, что св-во Text только для чтения.