Редактирование элемента через библиотеку

Автор IronMaxxx, 12.02.06, 09:25:29

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

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

IronMaxxx

После создания библиотекой модели (сборки) вставляю эту модель в активную сборку (пользователь указывает местоположение). При этом с помощью метода ksPart::SetUserParam устанавливаю параметры пользователя для последующего редактирования этой модели через библиотеку. Делаю примерно так:

                Parms := ksUserParam(kompas.GetParamStruct(ko_UserParam));
                Parms.Init;
                Arr := ksDynamicArray(kompas.GetDynamicArray(LTVARIANT_ARR));
                Item := ksLtVariant(kompas.GetParamStruct(ko_LtVariant));
                Item.Init;

                Item.intVal := MuftID;
                Arr.ksAddArrayItem(-1, Item);
                             ...

                Parms.SetUserArray(Arr);
                iPart.SetUserParam(Parms);

Параметры сохраняются (SetUserParam возвращает true), кроме того в дереве построений для моей подсборки появляется иконка стандартного элемента (болтик), как и должно быть. Но по двойному щелчку мыши модель не запускается на редактирование (только через контекстное меню) и при считывании параметров пользователя массив из ksUserParam всегда оказывается пуст :|.
Подскажите, что не так делаю...

Slaviation

Если в библиотеке определены комманды, то нужно добавить
Param.number := COMMAND_ITEM; //Номер команды библиотеки

IronMaxxx

Я об этом знал. На самом деле, команда у меня всего одна (вывод главного диалогового окна библиотеки), и в Parms она учитывается. Поэтому вопрос не снимается :~...
Еще немного подробностей: когда запускаем на редактирование библиотечную сборку, окно библиотеки появляется и все нормально работает, но когда дважды кликаем на сборке, то запускается на редактирование тот элемент сборки, по которому кликнули (т.е., таким образом, как и любой из компонентов обычной подсборки, когда он подсвечивается синим, а все остальные детали - зеленым). Я вот уже думаю, может для сборок нет возможности реализовать такой способ редактирования?..
Хотя все равно есть какая-то ошибка, т.к. массив пользовательских переменных пуст (проблема не в инициализации - он коректно считывается, но не содержит ни единого элемента).
Надеюсь на чью-либо помощь...

Kamovich

Проблема в том, что ты их инициализировал, а значения не установил, т.е. при инициализации пользовательских параметров значения не устанавливаются, поэтому значения параметров при редактировании возвращаются пустыми. Их необходимо установить с помощью команды ksSetArrayItem. Вот пример на Delphi^
////////////////// Инициализация пользовательских параметров ///////////////////
procedure TModel.InitUserParam;
var Item : ksLtVariant;
    Arr  : ksDynamicArray;
begin
  if Param <> nil then begin
    Item := ksLtVariant(iKompas.GetParamStruct(ko_LtVariant));
    Arr := ksDynamicArray(iKompas.GetDynamicArray(LTVARIANT_ARR));
    if (Item <> nil) and (Arr <> nil) then begin
      Param.Init;
      Param.SetUserArray(Arr);
      Item.Init;

      Item.strVal := 'Модель';
      Arr.ksAddArrayItem(-1, Item);

      Item.doubleVal := 1;
      Arr.ksAddArrayItem(-1, Item);

    end;
  end;
end;
//////////////////// Установка пользовательских параметров /////////////////////
procedure TModel.SetUserParam;
var Item : ksLtVariant;
    Arr  : ksDynamicArray;
begin
  if Param <> nil then begin
    Item := ksLtVariant(iKompas.GetParamStruct(ko_LtVariant));
    Arr := ksDynamicArray(Param.GetUserArray);
    if (Item <> nil) and (Arr <> nil) and (Arr.ksGetArrayCount >= 2) then begin
      Item.Init;

      Item.strVal := Main.cxComboBox1.Text;
      Arr.ksSetArrayItem(0, Item);

      if Main.Bend then Item.doubleVal := 1
      else Item.doubleVal := 0;
      Arr.ksSetArrayItem(1, Item);
    end;
  end;
end;
//////////////////////////////////////////////////////////////////////

Кстати это тот парень с "Туполевских чтений"

IronMaxxx

23.02.06, 19:57:39 #4 Последнее редактирование: 23.02.06, 20:04:14 от IronMaxxx
Цитата: Kamovich от 20.02.06, 01:42:59
Кстати это тот парень с "Туполевских чтений"

Спасибо за исчерпывающий ответ, но я уже сам разобрался, потому и не заглядывал в этот топик.
Относительно последней фразы... Что означает Ваше: "...это тот парень с "Туполевских чтений"? Вы там тоже были, Kamovich? 8-)

P.S. Только что посмотрел твой профиль. Так это ты, Айдын? :o: Я как-то сразу не догадался... Мдааа, мир тесен :-))). Еще раз спасибо за ответ :fr:.

Gek

Народ, а что за Туполевские чтения? Имеются в виду публичные чтения чертежей великого конструктора?  :o

IronMaxxx

Цитата: Gek от 25.02.06, 15:23:00
Народ, а что за Туполевские чтения? Имеются в виду публичные чтения чертежей великого конструктора?  :o

Нет :). "Туполевские чтения" - это ежегодная студенческая научная конференция, что проходит на базе Казанского государственного технического университета им. А.Н. Туполева (бывший КАИ - Казанский авиационный институт). В прошлом году в конференции участвовали более 1100 студентов и аспирантов со всей России (ну и я один с Украины :)). Последняя конференция включала 42 (если не ошибаюсь) секции, начиная с экономики и философии и заканчивая САПР, машиностроением, авиастроением и пр.
Честно говоря, организация самого мероприятия оставляла желать лучшего, но в целом было очень интересно пообщаться с разными людьми, посмотреть на Казань и все такое. С многими, с кем там познакомился, я до сих пор поддерживаю отношения - регулярно общаемся по и-нету.