Тема: Тонкости работы с панелями главного окна TDMS 4.0

$matches[1]

1.    Краткое описание
Речь в публикации пойдёт о добавлении в систему TDMS-клиент панелей главного окна, на которых могут быть размещены различные элементы управления, а также ActiveX-компоненты.
Под панелями понимаются области главного окна системы TDMS 4.0-клиент с расположенными на них элементами управления и информационными объектами (пример: дерево объектов, свойства, окно состава).

2.    Основная часть
Для реализации поставленной задачи в первую очередь создаётся новая форма ввода с произвольным (выбранным в зависимости от назначения) набором элементов управления. Затем созданная форма «привязывается» к профилю, пользователям которого требуется назначить панель главного окна. При следующем запуске сессии TDMS 4.0-клиент для пользователя, обладающего выбранным профилем, в главном окне будет отображена созданная панель.

Тонкости работы с панелями главного окна TDMS 4.0

Для передачи на панель информации из выделенного объекта дерева TDMS и обращения к элементам управления панели из системного скрипта рекомендуется использовать коллекцию форм ввода (TDMSApplication.Shell.FormPanes).

Так как событие при выборе объекта в дереве TDMS не происходит, рекомендуется фиксировать выбор объекта инициализацией соответствующей выбранному объекту панели «свойства».
Чтобы реализовать передачу информации из системного скрипта в скрипт созданной панели рекомендуется использовать TDMSApplication.Dictionary. Информацию о выбранном в дереве TDMS объекте можно получить с помощью коллекции ThisApplication.Shell.SelObjects.

Пример.
Пример использования дополнительных панелей главного окна – формирование отчёта о стадии разработки элементов проекта в виде круговой диаграммы.

Тонкости работы с панелями главного окна TDMS 4.0

3.    Вывод
Дополнительные панели главного окна можно использовать для формирования аналитических справок (в виде таблиц, диаграмм и т.п.) по выбранным информационным объектам, или в качестве элементов интеграции системы TDMS со сторонними приложениями.


Комментарий. Чтобы ознакомиться с прикреплённым примером следует "привязать" форму ввода "Веб браузер" к профилю Default profile.

Post's attachments

Web_Browser.tds 8.57 Кб, 84 скачиваний с 2012-11-22 

You don't have the permssions to download the attachments of this post.

Re: Тонкости работы с панелями главного окна TDMS 4.0

GeorgiyOvsyann пишет:

...
Так как событие при выборе объекта в дереве TDMS не происходит, рекомендуется фиксировать выбор объекта инициализацией соответствующей выбранному объекту панели «свойства».
...

А можно подробнее по вопросу обновления панели при изменении выбранного объекта?
Что означает «инициализация соответствующей выбранному объекту панели "свойства". »? Как это можно сделать? Если можно, с примером кода. Спасибо.

Re: Тонкости работы с панелями главного окна TDMS 4.0

lenav пишет:

А можно подробнее по вопросу обновления панели при изменении выбранного объекта?
Что означает «инициализация соответствующей выбранному объекту панели "свойства". »? Как это можно сделать? Если можно, с примером кода. Спасибо.

При выборе объекта в дереве автоматически инициализируется соответствующая ему форма "Свойства" (на картинке обвёл красным).

Тонкости работы с панелями главного окна TDMS 4.0

Чтобы обработать это событие в общесистемном скрипте выберите из списка процедуру Object_PropertiesDlgInit.

Тонкости работы с панелями главного окна TDMS 4.0

в скрипте появится следующий код:

Sub Object_PropertiesDlgInit(Dialog, Obj, Forms)
End Sub

Вот, собственно, и всё - отработку события реализуете на Ваше усмотрение.

Re: Тонкости работы с панелями главного окна TDMS 4.0

GeorgiyOvsyann пишет:

Чтобы обработать это событие в общесистемном скрипте выберите из списка процедуру Object_PropertiesDlgInit.
в скрипте появится следующий код:

Sub Object_PropertiesDlgInit(Dialog, Obj, Forms)
End Sub

Вот, собственно, и всё - отработку события реализуете на Ваше усмотрение.

Большое спасибо за разъяснения.
Получилось не с первого раза, т.к. добавили нужный код в событие Form_BeforeShow, а он отрабатывает один единственный раз при открытии ТДМС (при refresh не отрабатывает).

(изменено: Jecka, 2 апреля 2013г. 18:46:22)

Re: Тонкости работы с панелями главного окна TDMS 4.0

Добрый день
Возник сразу вопрос-предложение, может сделать событие Object_Selected(TDMSObject object, TDMSUIPlace place, object parentArray)
где place - перечисление
place = {inTree, inList} или {inTree, inList, inQueryOnForm, inQuery}
parentArray - путь к объекту в момент выделения

Дело в том, что когда объект выделен в дереве, необязательно произойдет событие Object_PropertiesDlgInit, поскольку в этот момент может быть выбрана панель "Файлы" или "Просмотр" или "Связи"

В настоящее время ставятся задачи отслеживания выделенного объекта, в том числе и с помощью панелей .
И кроме таймера вариантов не остается. А таймер, сами понимаете, не очень надежный и экономный вариант.

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

Re: Тонкости работы с панелями главного окна TDMS 4.0

Jecka пишет:

Дело в том, что когда объект выделен в дереве, необязательно произойдет событие Object_PropertiesDlgInit, поскольку в этот момент может быть выбрана панель "Файлы" или "Просмотр" или "Связи"

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

(изменено: Jecka, 14 июня 2013г. 14:36:25)

Re: Тонкости работы с панелями главного окна TDMS 4.0

McZag пишет:

Если у вас открыты другие вкладки диалога свойств объекта, событие все равно произойдет.

Вах, шайтан!
Действительно происходит! Очень удобно!

McZag пишет:

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

Таким образом, если мы уйдем с объекта на почту например, то на дополнительной форме останется информация по последнему объекту.
Предполагается ли в дальнейшем добавление события "Object_PropertiesDlgDeInit", которое бы оповещало об уходе с объекта?