Тема: TDMS 3.0.200 Обновление иконки в дереве объектов

В составе объекта ObjA есть объекты ObjB

Внешний вид (тип) иконки ObjA зависит от атрибутов входящих в него ObjB
Проверка происходит на Object_Modified(Obj) в скрипте ObjA

После изменения ObjB, хочу дать команду ObjA, чтобы он тоже обновился. Делаю так (в Object_Modified(Obj) скрипта ObjB):

Set mParent = Obj.Uplinks.Item(0)
Call ThisApplication.ExecuteScript(mParent.Objectdef,"Object_Modified",mParent)

(я правильно понимаю, что это верный способ вызвать определенный обработчик у объекта уровнем выше?)

Управление в обработчик ObjA попадает, тот скрипт отрабатывает, но в дереве иконка ObjA остается необновленной
(Call mParent.Update тоже не помогает)
Хотя если смотреть на ObjA в окне списка - то там он уже с верной иконкой.

Каким образом можно дать команду перерисоваться объекту в дереве?
(есть Call ThisApplication.Shell.Update, но когда он отрабатывает дерево сворачивается)

Спасибо

Re: TDMS 3.0.200 Обновление иконки в дереве объектов

Вопрос решил с помощью:

Call ThisApplication.Shell.Update(mParent)

Не сразу понял, из документации по Shell.Update, что передавать можно любой объект (из дерева)
Еще бы ветка обонвляемого элемента не сворачивалась (или разворачивалась бы обратно после обновления) - было бы совсем удобно.
А так от пользователя "убегает" объект из дерева, если обновляется один из его верхних узлов в дереве.

Вопрос снят.

(изменено: vorona, 2 сентября 2010г. 10:59:28)

Re: TDMS 3.0.200 Обновление иконки в дереве объектов

vlalexey пишет:

Вопрос решил с помощью:

Call ThisApplication.Shell.Update(mParent)

Еще бы ветка обонвляемого элемента не сворачивалась (или разворачивалась бы обратно после обновления) - было бы совсем удобно.
А так от пользователя "убегает" объект из дерева, если обновляется один из его верхних узлов в дереве.

может стоит попробовать еще такое добавить?

ThisApplication.Shell.SetActiveTreeItem(Объект)

(изменено: vlalexey, 2 сентября 2010г. 12:47:48)

Re: TDMS 3.0.200 Обновление иконки в дереве объектов

vorona пишет:

ThisApplication.Shell.SetActiveTreeItem(Объект)

Хм. А в документации про TDMSShell я такой функции не вижу

Но все равно на

Call ThisApplication.Shell.SetActiveTreeItem(Obj)

ветка дерева не разворачивается почему-то. Может есть команда, которая сворачивает/разворачивает узел дерева

Но сама SetActiveTreeItem работает если элемент дерева развернут, т.е. SetActiveTreeItem(mParent.Uplinks.Item(0)) срабатывает

TDMS 3.0.200

(изменено: vorona, 2 сентября 2010г. 13:06:00)

Re: TDMS 3.0.200 Обновление иконки в дереве объектов

vlalexey пишет:

Хм. А в документации про TDMSShell я такой функции не вижу

Но все равно на

Call ThisApplication.Shell.SetActiveTreeItem(Obj)

ветка дерева не разворачивается почему-то. Может есть команда, которая сворачивает/разворачивает узел дерева

Но сама SetActiveTreeItem работает если элемент дерева развернут, т.е. SetActiveTreeItem(mParent.Uplinks.Item(0)) срабатывает

TDMS 3.0.200

   :blink: видимо в тройке такой фичи нет, извиняюсь за ложную информацию

Re: TDMS 3.0.200 Обновление иконки в дереве объектов

vorona пишет:

:blink: видимо в тройке такой фичи нет, извиняюсь за ложную информацию

А откуда это функция? 4.0?

(изменено: vorona, 2 сентября 2010г. 13:40:11)

Re: TDMS 3.0.200 Обновление иконки в дереве объектов

vlalexey пишет:

А откуда это функция? 4.0?

да.
В тройке есть способ, но он кривоватый и если на пути будут выборки то может и не работать, т.е. в  ThisApplication.Shell.SetActiveTreeItem нужно передать путь до объекта. пример ниже  :)

sub main(Obj)
dim pObj, arr(), pCol, i

set pCol = ThisApplication.Shell.SelObjectsPath

ReDim Arr(pCol.Count+1)

for i = 0 to pCol.Count -1
  set Arr(i) = pCol.Item(i)
next
set Arr(pCol.Count+1) = Obj
set pObj = Obj.Parent
  ThisApplication.Shell.Update(pObj)
  ThisApplication.Shell.SetActiveTreeItem(Arr)
end sub

Re: TDMS 3.0.200 Обновление иконки в дереве объектов

Спасибо.
Попробую так.