<< Click to Display Table of Contents >> Navigation: Проект > Элементы дерева объектов > Палитра ФБ > Служебные > Скрипт > Руководство и примеры > Работа с трендами > Скрипт добавления закладки |
Добавление закладок в тренд производится через контекстное меню графической области. Также можно добавлять закладки из кода скрипта - например при возникновении каких то событий, которые нужно отметить на графике. При этом следует учитывать, что тренд может быть закрыт в этот момент времени, поэтому алгоритм должен уметь добавлять закладки как в закрытый, так и открытый тренд.
В этот раз мы будем добавлять закладку в тренд-документ, а не тренд расположенный на мнемосхеме.
Сделаем заготовку - создадим объект, а в нем тренд. Добавим скрипт с двумя входами - Применить и ВремяЗакладки.
Для того чтобы добавить закладку в открытый тренд необходимо:
openTrend.OnAddBookmark(); //добавить закладку
var Bookmarks = openTrend.Settings.Objects.OfType<Bookmark>().ToList(); //получить список всех закладок
var Bookmark = Bookmarks.Last(); //взять поcледнюю
Bookmark.Position = DateTime.UtcNow.ToOADate(); //изменить ее позицию задав время
Bookmark.Comment = "Комментарий"; //задать комментарий если требуется
С закрытым трендом все несколько сложнее. У тренда есть специальный класс TrendSettingsChanger, с помощью которого можно обращаться к настройкам закрытого тренда. В данный класс необходимо загрузить настройки текущего тренда и после этого можно их менять.
using (var changer = new TrendSettingsChanger()) //создаем класс
{
var settings= changer.Load(trend.DocFile);//загружаем параметры тренда
var bookmark = new Bookmark(); //создаем закладку
bookmark.Position = DateTime.UtcNow.ToOADate(); //меняем ее позицию
settings.Objects.Add(bookmark); //добавляем закладку в объекты тренда
}
Теперь остается только найти в текущем объекте нужный тренд и выполнить нужный код в зависимости от того открыт он или закрыт. Итоговый код будет выглядеть так:
string ИМЯ_ТРЕНДА = "Тренды~Тренд";
bool? M = false;
public override void Execute()
{
if (Применить == true && M == false && ВремяЗакладки.HasValue)
{
var Project = HostFB.TreeItemHlp.Project;
var obj = (ITreeItemHlp)HostFB.TreeItemHlp.Parent;
IAttributesHlp trends = obj.Attributes;
var trend = trends.First(x => x.Attribute.Name == ИМЯ_ТРЕНДА);//поиск по имени
if (trend == null) return; //тренд не найден
if (trend.Opened)
{
RTManager.Instance.ThreadHolder.BeginInvoke(new ThreadStart(delegate
{
foreach (Trend openTrend in Project.GetService<TrendService>().Opened)
{
if (openTrend.Attribute.Name != ИМЯ_ТРЕНДА || openTrend.Attribute.TreeItem.ID != HostFB.TreeItemHlp.ParentObject.ID) continue;
openTrend.OnAddBookmark(); //создаем закладку
var Bookmarks = openTrend.Settings.Objects.OfType<Bookmark>().ToList();
var Bookmark = Bookmarks.Last(); //берем последнюю
Bookmark.Position = ВремяЗакладки.Value.ToUniversalTime().ToOADate(); //меняем ее позицию
Bookmark.Comment = "Комментарий";//задаем комментарий
}
}));
}
else
{
using (var changer = new TrendSettingsChanger()) //создаем класс для изменений
{
settings = changer.Load(trend.DocFile);//загружаем параметры тренда
var bookmark = new Bookmark(); //создаем закладку
bookmark.Comment = "Комментарий"; //задаем комментарий
bookmark.Position = ВремяЗакладки.Value.ToUniversalTime().ToOADate(); //меняем ее позицию
settings.Objects.Add(bookmark); //добавляем закладку в объекты тренда
}
}
}
M = Применить;
}
Обратите внимание как задается имя тренда - string ИМЯ_ТРЕНДА = "Тренды~Тренд" таким образом указывается что ищется документ "Тренд" во вкладке "Тренды".
Запустим режим исполнения и попробуем добавить закладки, когда тренд открыт и когда тренд закрыт.
Готовый пример можно скачать по ссылке.
С помощью класса TrendSettingsChanger можно также и менять настройки при закрытом тренде (в том числе и в режиме разработки). Например изменение подписи бордюра:
using (var changer = new TrendSettingsChanger())
{
//загрузка настроек
var настройки = changer.Load(trend.DocFile);
//изменение настроек
string ИМЯ_НАСТРОЙКИ_ТРЕНДА = "Бордюр.Подпись";
string ЗНАЧЕНИЕ_НАСТРОЙКИ_ТРЕНДА = "Текст бордюра";
var результат = настройки.SetProperty(trend, ИМЯ_НАСТРОЙКИ_ТРЕНДА, ЗНАЧЕНИЕ_НАСТРОЙКИ_ТРЕНДА);
}
Пример скрипта который меняет настройки всех трендов можно скачать по ссылке.