Автор |
Повідомлення |
Повідомлення створено: 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 тогда так:
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.
|