• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Всё тот же злополучный штамп

Автор ZоrDоs, 01.08.05, 12:08:05

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

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

ZоrDоs

// Работа со штампом
procedure Demo_Stamp;
var iDoc : ksDocument2D;
    iStamp : ksStamp;
    iItemParam : ksTextItemParam;
    iItemFont : ksTextItemFont;
    nCell : Integer;
begin
  iDoc := ksDocument2D(iKompas.ActiveDocument2D);
  if iDoc=nil then
    Exit;

  // Интерфейс ’Штамп’
  iStamp := ksStamp(iDoc.GetStamp);
  // Интерфейс ’Параметры компоненты текстовой строки’
  iItemParam := ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));
  iItemParam.Init;

  // Интерфейс ’Параметры шрифта компоненты текстовой строки’
  iItemFont := ksTextItemFont(iItemParam.GetItemFont);
  // Признак начертания текста: новая строка в параграфе
  iItemFont.SetBitVectorValue( NEW_LINE, true );

  if iStamp.ksOpenStamp = 1 then
  begin
    for nCell:=0 to 200 do
    begin
      // Сделать ячейку с номером nCell текущей
      iStamp.ksColumnNumber(nCell);
      // Поместить в текущую ячейку одну текстовую строку
      iItemParam.s := Format( ’Ячейка %d’, [nCell] );
      iStamp.ksTextLine( iItemParam );
    end;

    iStamp.ksCloseStamp;
  end;
end;

Это код пример для работы с интерфейсом штампа взятый из раздела downloads  с этого штампа.
Код демонстрирует как програмно записывать значения в ячейки штампа. Всё работает, всё замечательно, но есть маленькая проблемка: ЗАПИСАТЬ ЗАПИСАЛИ, А КАК ПРОЧИТАТЬ ЗНАЧЕНИЕ ИЗ НУЖНОЙ ЯЧЕЙКИ?

Nik

ksStamp::ksGetStampColumnText

Чтение документации еще никто не отменял

ZorDos

Это указатель на динамический массив, но почему - то количество элементов в нём всегда 0

333

В Step 5 есть пример получения текста из штампа.

ZorDos


sorockinalex

посмотрел я этот пример. для меня разобраться пока просто нереально!
procedure EditStamp;
var
  stamp: ksStamp;
  numb: integer;
  arr: ksDynamicArray;
  arrpLineText: ksDynamicArray;
  itemLineText: ksTextLineParam;
  arrpTextItem: ksDynamicArray;
  item: ksTextItemParam;
  count: integer;
  count2: integer;
  i: integer;
  j: integer;
  textItemFont: ksTextItemFont;
//  item: ksTextItemParam;
  itemFont: ksTextItemFont;
begin
stamp := ksStamp( doc.GetStamp() );
if ( stamp <> nil ) and ( stamp.ksOpenStamp() <> 0 ) then
  begin
    //в цикле будем брать все существующие графы
arr := ksDynamicArray( stamp.ksGetStampColumnText( numb ) );
while ( numb <> 0 ) and ( arr <> nil ) do
    begin
      kompas.ksMessage( Format( 'numb =%d', [ numb ] ) );

  arrpLineText := ksDynamicArray( kompas.GetDynamicArray(TEXT_LINE_ARR) );
itemLineText := ksTextLineParam( kompas.GetParamStruct(ko_TextLineParam) );
  if itemLineText = nil then
exit;
itemLineText.Init();

      count := arr.ksGetArrayCount();
      for i := 0 to count - 1 do
      begin
  arr.ksGetArrayItem( i, itemLineText );
        kompas.ksMessage( Format( 'i =%d style=%d', [ i, itemLineText.Style ] ) );

arrpTextItem := ksDynamicArray( itemLineText.GetTextItemArr() );
  item := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam) );

if ( item = nil ) or ( arrpTextItem = nil ) then
    exit;
  item.Init();

        count2 := arrpTextItem.ksGetArrayCount();
for j := 0 to count2 - 1 do
        begin
          arrpTextItem.ksGetArrayItem( j, item );
textItemFont := ksTextItemFont( item.GetItemFont() );
          kompas.ksMessage( Format( 'компонента=%d   h=%5.1f   s=%s   fontName=%s', [ j, textItemFont.Height, item.S,
         textItemFont.FontName ] ) );
        end;
        arrpTextItem.ksDeleteArray();  //очистим массив компонент
      end;
      //очистим массив текстовых строк
      arrpLineText.ksDeleteArray();

  arr.ksDeleteArray();
arr := ksDynamicArray(stamp.ksGetStampColumnText( numb ));
    end;
    //заменим  графу 2
    doc.ksColumnNumber( 2 );
item := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam) );
if item = nil then
    begin
stamp.ksCloseStamp();
exit;
end;
item.Init();
itemFont := ksTextItemFont( item.GetItemFont() );
if ( item <> nil ) and ( itemFont <> nil ) then
    begin
itemFont.bitVector := NEW_LINE;
item.S := 'графа 2';
doc.ksTextLine( item );
end;
    stamp.ksCloseStamp();
  end else
    kompas.ksError ( 'Штамп не найден' );
end;


как по простому можно прочитать тект из ячейки?
почему так нельзя???
function ShowEditStampForm (iKompas:KompasObject;iDoc:ksDocument2D):Reference;
var
  idocParams : ksDocumentParam;
  iStamp: ksStamp;
begin
  iDocParams := ksDocumentParam (iKompas.GetParamStruct (35));
  iStamp:=ksStamp(iDoc.GetStamp);
  iStamp.ksOpenStamp;
iKompas.ksMessage(iStamp.ksGetStampColumnText(1));
  iStamp.ksCloseStamp;
end;


iKompas.ksMessage(iStamp.ksGetStampColumnText(1));        -- эта строка не выходит! возможно ли сделать как-нибудь подобным образом?