Изменение размера титровального элемента из скрипта

Здесь обсуждаются любые продукты компании СофтЛаб-НСК для телевизионного вещания (Форвард Т, Форвард ТС, Форвард Голкипер, Форвард Рефери, Форвард Офис, Форвард Инжест)

Модераторы: Людмила, PR, vd, Даниленко Сергей

Ответить
Kzm
Сообщения: 7
Зарегистрирован: 14 дек 2016 14:58

Изменение размера титровального элемента из скрипта

Сообщение Kzm »

Здравствуйте.
Можно изменять размер титровального элемента из скрипта?
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Что подразумевается под скриптом?
Нельзя ли более подробно описать свою задачу?
Kzm
Сообщения: 7
Зарегистрирован: 14 дек 2016 14:58

Сообщение Kzm »

Даниленко Сергей писал(а):Что подразумевается под скриптом?
Скрипт титровального объекта со скриптом
Нельзя ли более подробно описать свою задачу?
Для анонса необходимо изменять размер подложки в зависимости от длины текста
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Да, конечно можно. Например, в платном скрипте TS1_Promo1 размер подложки подгоняется под длину текста.
Kzm
Сообщения: 7
Зарегистрирован: 14 дек 2016 14:58

Сообщение Kzm »

Разобрался.
Задается с помощью TitleElementWrapper["Имя свойства"].
Пример:
var backSize : int[] = new int[2];
backSize[0] = textSize;
backSize[1] = 104;
Backgr["Size"] = backSize;
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

А как вы получаете размер текста textSize?
Kzm
Сообщения: 7
Зарегистрирован: 14 дек 2016 14:58

Сообщение Kzm »

Даниленко Сергей писал(а):А как вы получаете размер текста textSize?
Пока просто умножаю число символов на ширину одного (подобранную опытным путем).
Фрагмент целиком:

Код: Выделить всё

var textTask : String = this.task.GetText();
dbg.Trace("textTask: " + textTask);
var i = textTask.IndexOf(">") + 1;
dbg.Trace("i = " + i);
textTask = textTask.Substring(i); 
var textSize : int = textTask.length * 17 + 20;
if (textSize > 500) {
	textSize = 500;
}
var backSize : int[] = new int[2];
backSize[0] = textSize;
backSize[1] = 104; 
Backgr["Size"] = backSize;
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Честный способ нужен?
Kzm
Сообщения: 7
Зарегистрирован: 14 дек 2016 14:58

Сообщение Kzm »

Да, буду благодарен
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Ниже ответ наших разработчиков:
Пусть титровальный элемент Подпись, для которого нужно вычислить оптимальный размер называется Text.

1. Заводится вспомогательный титровальный элемент Подпись с названием Srvc

2. В конструкторе скрипта или в методе скрипта init() устанавливаются следующие свойства элемента Srvc:

Код: Выделить всё

Srvc["Direction"] = 4;    // Въезд: нет
Srvc["OutDirection"] = 0; // Выезд: влево
Srvc["Speed"] = 0.1;      // Скорость: 0.1 пиксель/сек - небольшая для повышения точности
Srvc["FadeIn"] = 0.0;     // Начальный переход: нет
Srvc["FadeOut"] = 0.0;    // Конечный переход: нет
Srvc["StayTime"] = 0.0;   // Время покоя: 0 (нет)
Srvc["Pause"] = 0.0;      // Пауза: 0 (нет)
Srvc["HAlignment"] = 1;   // Горизонтальное выравнивание: к левому краю
Так же можно сделать этот элемент полностью прозрачным, чтобы он гарантировано никогда не появлялся на экране.

Код: Выделить всё

Srvc["Alpha"] = 0;
Для предотвращения случайного изменения этих свойств вручную, запретим их модификацию:

Код: Выделить всё

Srvc.SetPropertyDummy("Direction", true);
Srvc.SetPropertyDummy("OutDirection", true);
Srvc.SetPropertyDummy("Speed", true);
Srvc.SetPropertyDummy("FadeIn", true);
Srvc.SetPropertyDummy("FadeOut", true);
Srvc.SetPropertyDummy("StayTime", true);
Srvc.SetPropertyDummy("Pause", true);
Srvc.SetPropertyDummy("HAlignment", true);
Srvc.SetPropertyDummy("Alpha", true);
3. Остальные свойства элемента Srvc синхронизируются с аналогичными свойствами элемента Text. Для упрощения процедуры можно реализовать следующую функцию:

Код: Выделить всё

function syncProperties(
master : TitleElementWrapper, // элемент, с которым синхронизуются настройки
slave : TitleElementWrapper,  // элемент, чьи настройки надо синхронизовать
... names : String[]          // список настроек, строки, переменное количество аргументов функции
) : void
{
if &#40; !master || !slave || !names || names.Length < 1 &#41;
return;
for &#40; var i &#58; int in names &#41;
&#123;
try
&#123;
slave.SetPropertyDummy&#40;names&#91;i&#93;, true&#41;;
slave&#91;names&#91;i&#93;&#93; = master&#91;names&#91;i&#93;&#93;;
&#125;
catch &#40; e &#58; Exception &#41; &#123; &#125;
&#125;
&#125;
Эту функцию можно использовать в конструкторе скрипта или в методе скрипта init() следующим образом:

Код: Выделить всё

syncProperties&#40;Text, Srvc, 
"VAlignment", 
"hFilter", "vFilter", 
"StyleFile", "StyleIndex", 
"LeftMargin", "RightMargin", "UseWidth", "Paragraph",
"SubstituteFile", "Separators"
&#41;;

4. Для вычисления оптимального горизонтального размера элемента реализуем следующую функцию:

Код: Выделить всё

function getSizeX&#40;taskText &#58; String, taskType &#58; ETaskType&#41; &#58; int
&#123;
const info &#58; TaskInfoArgs = new TaskInfoArgs&#40;&#41;;
try
&#123;
Srvc.GetTaskInfo&#40;taskText, taskType, &info&#41;;
var sizeX &#58; int = int&#40; &#40; info.duration * titleRoot.FrameRate * Srvc&#91;"Speed"&#93; &#41; + 0.5 &#41;;
// раскомментировать следующие строки, если требуется выравнивать размеры  по сетке
// const gridX &#58; int = 16; // сетка выравнивания, влияет на расположение и размеры элемента &#40;см. настройки проекта&#41;
// sizeX = int&#40; &#40; sizeX + &#40; gridX - 1 &#41; &#41; / gridX &#41; * gridX;
return sizeX;
&#125;
catch &#40; e &#58; Exception &#41; &#123; &#125;
return 0; // возвращаемое значение в случае ошибки вычисления
&#125;
5. Использование функции

Код: Выделить всё

int sizeX = getSizeX&#40;"Текстовое задание", ETaskType.eTaskText&#41;;
результатом вычислений пользоваться аккуратно, вычисленный размер легко может превысить ширину экрана.
Kzm
Сообщения: 7
Зарегистрирован: 14 дек 2016 14:58

Сообщение Kzm »

Спасибо. Попробую
Ученик
Сообщения: 18
Зарегистрирован: 01 дек 2016 02:02

Сообщение Ученик »

Здравствуйте. Читал здесь на форуме, что скрипты творят чудеса. Дайте ссылку или какую нибудь инструкцию для работы со скриптом. С чего начинать и как ею пользоваться. В программе FDTitleDesigner во вкладке открыл бесплатные TSF скрипты, а что дальше делать без понятия. Я далёк от программирования, но хочу разобраться в этом.
Kzm
Сообщения: 7
Зарегистрирован: 14 дек 2016 14:58

Сообщение Kzm »

Ученик писал(а):Здравствуйте. Читал здесь на форуме, что скрипты творят чудеса. Дайте ссылку или какую нибудь инструкцию для работы со скриптом. С чего начинать и как ею пользоваться. В программе FDTitleDesigner во вкладке открыл бесплатные TSF скрипты, а что дальше делать без понятия. Я далёк от программирования, но хочу разобраться в этом.
Я бы рекомендовал начать с этого: Титровальные скрипты - создание объекта шаг за шагом.
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Это тоже полезно будет:
C:\Program Files\ForwardT Software\FDTitle\TitleScriptDocumentation.chm

Справка об объектах для работы со скриптом, общие сведения и правила, описание методов и т.д.
Ответить