Тема: TDMS. Сортировка дерева объектов

Есть задача - создать команду сортировки дерева объектов по заданному параметру.
Читаю учебник - Индексом положения объекта в составе объекта контейнера является свойство Order объекта. Чем он меньше, тем объект находится выше.
Чтобы понять как это работает пытаюсь написать простенькую команду для получения текущего значения Order выбранного объекта:

MsgBox  ThisObject.order

и получаю следущую ошибку:

Объект должен быть получен из коллекции объектов!

И тут ступор... Почему, а главное как выбранный объект должен быть получен из коллекции? И почему тогда получение опятьже элементарного Description не  требует за собой никаких дополнительных действий?

Re: TDMS. Сортировка дерева объектов

Всё правильно.
Один и тот же объект может входить в разных родителей - Поэтому чтобы определить Order, Вы должны указать родителя! Т.к. в разных родителях Order ребенка будет разный!
Т.е. необходимо:
Parent.Objects(Object).Order
Parent - Объект содержащий Object.
Если необходимо передвинуть выше, то:
Parent.Objects(Object).Order = Parent.Objects(Object).Order - 1
P.S. То же самое с выборками.

Re: TDMS. Сортировка дерева объектов

Как то я пропустил этот момент (про нескольких родителей). Спасибо!
Продолжая тему сортировки - можно ли создать подобие "дерева" команд как это реализовано например в Explorer'е: Упорядочить значки>"перечень типов сортировки"?

Re: TDMS. Сортировка дерева объектов

Что-то я сообразить не могу. Как получить этот самый Parent если выбор объекта осуществлялся через ThisObject (см. код выше)? Запутался я с этими ParentObject и uplinks...

Re: TDMS. Сортировка дерева объектов

можно ли создать подобие "дерева" команд как это реализовано например в Explorer'е: Упорядочить значки>"перечень типов сортировки"?

Эта возможность уже реализована в 3-й версии TDMS.

Как получить этот самый Parent если выбор объекта осуществлялся через ThisObject (см. код выше)? Запутался я с этими ParentObject и uplinks...

Всё зависит от того, откуда Вы вызываете эту команду. Если из событий, то там в параметре процедуры указан Parent. Если нет, то здесь 2-а варианта:
1.Если добавление ссылок запрещено(т.е. всегда один родитель), то Parent-ом всегда будет ThisObject.Uplinks(0)
2.Если добавление ссылок разрешено, то лучше всего добавить атрибут, типа "ATTR_MAIN_PARENT", в который при создании объекта(на Object_Before_Create) заносить parent (он есть в параметре). И потом, при вызове, это будет быглядеть так: Set Parent = ThisObject.Attributes("ATTR_MAIN_PARENT").Object
P.S. в 3-й версии уже добавлено системное свойство MainParent