УкраїнськаEnglishmRussian
Вхід/Новий
У темі багато повідомлень

выделение виджетов в группу для работы с атрибутами


Автор Повідомлення
Повідомлення створено: 22. 04. 2011 [17:57]
TY_Obninsk
Илья Клемышев
Автор теми
Зареєстрован(а) с: 14.01.2011
Повідомлення: 63
Скажите, а возможна ли такая обработка виджетов: на мнемосхеме расположены несколько одинаковых элементов (например, "Отобр аналог"), есть элемент "кадр", настроенный на работу с ними. задача в том, что бы можно было произвольно выделить несколько таких элементов (скажем, кнопкой мыши при зажатом Shift'e) и в "кадре" изменять атрибуты выбранной группе?
Повідомлення створено: 22. 04. 2011 [19:58]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"TY_Obninsk" wrote:

Скажите, а возможна ли такая обработка виджетов: на мнемосхеме расположены несколько одинаковых элементов (например, "Отобр аналог"), есть элемент "кадр", настроенный на работу с ними. задача в том, что бы можно было произвольно выделить несколько таких элементов (скажем, кнопкой мыши при зажатом Shift'e) и в "кадре" изменять атрибуты выбранной группе?

Разве что полностью переделать контур параметра на динамический механизм.
В стандартном случае динамическая линковка осуществляется только с одним виджетом.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 26. 04. 2011 [12:38]
TY_Obninsk
Илья Клемышев
Автор теми
Зареєстрован(а) с: 14.01.2011
Повідомлення: 63
Роман, скажите, пожалуйста, есть ли пример работы с функцией "WdgList"? все мои попытки разобраться с ней пока не имели успеха...
Повідомлення створено: 26. 04. 2011 [12:45]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
Эта функция из устаревшего API и она уже везде, в моих проектах, удалена.
Используйте стандартную nodeList(), примеры которой, в данном контексте есть в Модели АГЛКС (ДемоБД) или просто в кадре корневой страницы библиотеке основных элементов: http://wiki.oscada.org/Using/GraphicElementsLibraries/MainElements#h1036-45

Learn, learn and learn better than work, work and work.
Повідомлення створено: 26. 04. 2011 [14:33]
TY_Obninsk
Илья Клемышев
Автор теми
Зареєстрован(а) с: 14.01.2011
Повідомлення: 63
Спасибо, вроде бы из примеров ясно, как что работает...возник еще один вопрос: как получить доступ к виджету по его адресу? то есть нужен объект типа "this", но полученный из имеющегося адреса (вроде "prj_1/pg_so/..."), что бы от его имени использовать функцию "nodeList" для доступа к дочерним виджетам.
Повідомлення створено: 26. 04. 2011 [15:26]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"TY_Obninsk" wrote:

Спасибо, вроде бы из примеров ясно, как что работает...возник еще один вопрос: как получить доступ к виджету по его адресу? то есть нужен объект типа "this", но полученный из имеющегося адреса (вроде "prj_1/pg_so/..."), что бы от его имени использовать функцию "nodeList" для доступа к дочерним виджетам.

Там же: nodeAt(), http://wiki.oscada.org/Doc/OpisanieProgrammy#h920-7

Learn, learn and learn better than work, work and work.
Повідомлення створено: 27. 04. 2011 [10:45]
TY_Obninsk
Илья Клемышев
Автор теми
Зареєстрован(а) с: 14.01.2011
Повідомлення: 63
Никак не получается получить доступ к объекту, не пойму в чем дело...

w = this.nodeAt(path + "/wdg_anShowRng1"); // path - аттрибут элемента "this", в котором производится обработка...
//> w = this["anShowRng1"]; // такой вариант работает...
Text1_text = w.attr("owner");

я неправильно задаю аргумент функции nodeAt()?

[Повідомлення редагувалось 1 раз(ів), останній раз 27.04.2011 в 10:54.]
Повідомлення створено: 27. 04. 2011 [11:18]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"TY_Obninsk" wrote:

Никак не получается получить доступ к объекту, не пойму в чем дело...

w = this.nodeAt(path + "/wdg_anShowRng1"); // path - аттрибут элемента "this", в котором производится обработка...

Почему тогда от this? Если используете path тогда так:
JAVASCRIPT
w = this.ownerSess().nodeAt(path + "/wdg_anShowRng1");

Хотя смысла в этом я не вижу.

"TY_Obninsk" wrote:

я неправильно задаю аргумент функции nodeAt()?

Скорее неправильно понимаете иерархичность дерева объектов и точки выборки узла.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 28. 04. 2011 [15:49]
TY_Obninsk
Илья Клемышев
Автор теми
Зареєстрован(а) с: 14.01.2011
Повідомлення: 63
Вобщем, я решил задачу, обозначенную в топике, однако, с той разницей, что группы элементов не формируются произвольно в реальном времени, а заданы изначально. Скорее всего решение вышло не слишком рациональное, но пока ума и знаний OScada хватило вот на что:

каждому элементу группы задан новый атрибут "group", в котором записаны адреса всех элементов группы в таком виде: Modul.Controller.Parameter (можно прописать и полный путь, "SYS.DAQ...Attribute").

В элементе "кадр", настроенном на данный элемент присутствует кнопка-переключатель для групповой или одиночной обработки.

Когда происходит связывание элемента с "кадром", определяется принадлежность к группе (или отсутствие оной). Если элемент состоит в группе, можно переключится на групповую обработку. Тогда считывается атрибут "group", парсится в массив m[] и при изменении необходимых атрибутов, они записываются в соотв. параметры системы в цикле [i++] подобным образом:

prmAttr = SYS.DAQ[m[i*3]][m[i*3+1]][m[i*3+2]].attr.set(value);

Может кому-то пригодится подобный опыт :) может кто-то подскажет, как сделать лучше!

[Повідомлення редагувалось 1 раз(ів), останній раз 28.04.2011 в 16:03.]
Повідомлення створено: 28. 04. 2011 [20:33]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"TY_Obninsk" wrote:

Вобщем, я решил задачу, обозначенную в топике, однако, с той разницей, что группы элементов не формируются произвольно в реальном времени, а заданы изначально. Скорее всего решение вышло не слишком рациональное, но пока ума и знаний OScada хватило вот на что:

каждому элементу группы задан новый атрибут "group", в котором записаны адреса всех элементов группы в таком виде: Modul.Controller.Parameter (можно прописать и полный путь, "SYS.DAQ...Attribute").

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

"TY_Obninsk" wrote:

В элементе "кадр", настроенном на данный элемент присутствует кнопка-переключатель для групповой или одиночной обработки.

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

Learn, learn and learn better than work, work and work.



2792