Не получается записать или прочитать переменную в макроэлемент 2D

Автор Дмитрий Геннадьевич, 09.05.16, 22:16:12

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

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

Дмитрий Геннадьевич

Не получается записать или прочитать переменную в макроэлемент 2D

вот фрагменты кода...



//код для записи переменной item в макроэлемент
.......

begin
  .....
  idoc.ksMacro(1);
  .....
  //что-то чертим...
  refmacro:=idoc.ksEndObj;
  .....
  prm:=ksuserparam(kompas.getparamstruct(ko_userparam));
  prm.Init;            //обнуляем поля объекта ksUserParam (для редактирования двойным кликом)
  prm.libName:='';     //прописываем поля объекта ksUserParam (для редактирования двойным кликом)
  prm.fileName:='';    //задаем параметры, соответствующие библиотеке с тем же именем
  prm.number:=-1;      //задаем параметры, соответствующие функции с тем же номером
  iitem:=ksltvariant(kompas.GetParamStruct(ko_ltvariant));
  iitem.Init;
  iitem.intVal:=item;     //пишем значение переменной item в элемент массива
  iArr := ksDynamicArray(kompas.GetDynamicArray(LTVARIANT_ARR));
  prm.SetUserArray(iarr);
  iarr.ksAddArrayItem(-1,iitem);
  idoc.ksSetMacroParam(refmacro,prm,false,false,false);   
  showmessage('записан массив из '+inttostr(iarr.ksGetArrayCount)+' элементов');
  iarr.ksDeleteArray; //удаляем динамический массив
end;



//код для чтения переменной item из макроэлемента
......
existedit:=idoc.ksEditMacroMode<>0; //флаг редактирования существующего макроэлемента
if existedit
  then
    begin   
      iArr := ksDynamicArray(kompas.GetDynamicArray(LTVARIANT_ARR));
      prm.SetUserArray(iarr);
      idoc.ksGetMacroParam(0,prm); 
      count:=iarr.ksGetArrayCount;     //получаем количество элементов в массиве
      showmessage('элементов в массиве - '+inttostr(count));  //вот здесь получаю ноль (((
        if count>0 then
              begin
                iitem:=ksltvariant(kompas.GetParamStruct(ko_ltvariant));
                iitem.Init;
                iitem.intVal:=0;
                iarr.ksGetArrayItem(0,iitem);
                item:=iitem.intVal;     //читаем значение элемент массива iitem.intVal в переменную item
              end;
      iarr.ksDeleteArray; //удаляем динамический массив
    end;

при чтении получается количество элементов массива - ноль (((
не могу понять, я неправильно пишу в макроэлемент или неправильно читаю из него (((
помогите пож-ста...

Дмитрий Геннадьевич

10.05.16, 21:28:04 #1 Последнее редактирование: 10.05.16, 22:44:04 от Дмитрий Геннадьевич
Разобрался... все работает, ларчик просто открывался  ;) записывался массив правильно (в чем убедился, просто добавив десяток переменных и проследив за размером получаемого файла))) А вот чтение "хромало"
Далее кусок исправленного кода для чтения динамического массива из макроэлемента и далее передача данных в статическую переменную


//код для чтения переменной item из макроэлемента
......
existedit:=idoc.ksEditMacroMode<>0; //флаг редактирования существующего макроэлемента
if existedit
  then
    begin   
      iArr := ksDynamicArray(kompas.GetDynamicArray(LTVARIANT_ARR));

            //добавленный кусок кода )))

            //тупо создаем структуру массива с переменной того же типа, что и требуется прочитать
            iitem:=ksltvariant(kompas.GetParamStruct(ko_ltvariant));
            iitem.Init;         //инициализация элемента массива
            iitem.intVal:=0;     //здесь произвольное значение, лишь бы что-то было
            iarr.ksAddArrayItem(-1,iitem);   //засунули созданный элемент в массив

            //далее почти без изменений )))

      prm.SetUserArray(iarr);
      idoc.ksGetMacroParam(0,prm);
      count:=iarr.ksGetArrayCount;     //получаем количество элементов в массиве
      showmessage('элементов в массиве - '+inttostr(count));  //вот здесь теперь получаю единичку )))   
      iarr.ksGetArrayItem(0,iitem);
      item:=iitem.intVal;     //читаем значение элемент массива iitem.intVal в переменную item           
      iarr.ksDeleteArray; //удаляем динамический массив
    end;