Изменение размера титровального элемента из скрипта
Модераторы: Людмила, PR, vd, Даниленко Сергей
-
- Сообщения: 7
- Зарегистрирован: 14 дек 2016 14:58
Изменение размера титровального элемента из скрипта
Здравствуйте.
Можно изменять размер титровального элемента из скрипта?
Можно изменять размер титровального элемента из скрипта?
-
- Сообщения: 7091
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK
-
- Сообщения: 7
- Зарегистрирован: 14 дек 2016 14:58
-
- Сообщения: 7091
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK
-
- Сообщения: 7
- Зарегистрирован: 14 дек 2016 14:58
-
- Сообщения: 7091
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK
-
- Сообщения: 7
- Зарегистрирован: 14 дек 2016 14:58
Пока просто умножаю число символов на ширину одного (подобранную опытным путем).Даниленко Сергей писал(а):А как вы получаете размер текста 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
-
- Сообщения: 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;
3. Остальные свойства элемента Srvc синхронизируются с аналогичными свойствами элемента Text. Для упрощения процедуры можно реализовать следующую функцию:Код: Выделить всё
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);
Эту функцию можно использовать в конструкторе скрипта или в методе скрипта init() следующим образом:Код: Выделить всё
function syncProperties( master : TitleElementWrapper, // элемент, с которым синхронизуются настройки slave : TitleElementWrapper, // элемент, чьи настройки надо синхронизовать ... names : String[] // список настроек, строки, переменное количество аргументов функции ) : void { if ( !master || !slave || !names || names.Length < 1 ) return; for ( var i : int in names ) { try { slave.SetPropertyDummy(names[i], true); slave[names[i]] = master[names[i]]; } catch ( e : Exception ) { } } }
Код: Выделить всё
syncProperties(Text, Srvc, "VAlignment", "hFilter", "vFilter", "StyleFile", "StyleIndex", "LeftMargin", "RightMargin", "UseWidth", "Paragraph", "SubstituteFile", "Separators" );
4. Для вычисления оптимального горизонтального размера элемента реализуем следующую функцию:
5. Использование функцииКод: Выделить всё
function getSizeX(taskText : String, taskType : ETaskType) : int { const info : TaskInfoArgs = new TaskInfoArgs(); try { Srvc.GetTaskInfo(taskText, taskType, &info); var sizeX : int = int( ( info.duration * titleRoot.FrameRate * Srvc["Speed"] ) + 0.5 ); // раскомментировать следующие строки, если требуется выравнивать размеры по сетке // const gridX : int = 16; // сетка выравнивания, влияет на расположение и размеры элемента (см. настройки проекта) // sizeX = int( ( sizeX + ( gridX - 1 ) ) / gridX ) * gridX; return sizeX; } catch ( e : Exception ) { } return 0; // возвращаемое значение в случае ошибки вычисления }
результатом вычислений пользоваться аккуратно, вычисленный размер легко может превысить ширину экрана.Код: Выделить всё
int sizeX = getSizeX("Текстовое задание", ETaskType.eTaskText);
-
- Сообщения: 18
- Зарегистрирован: 01 дек 2016 02:02
Здравствуйте. Читал здесь на форуме, что скрипты творят чудеса. Дайте ссылку или какую нибудь инструкцию для работы со скриптом. С чего начинать и как ею пользоваться. В программе FDTitleDesigner во вкладке открыл бесплатные TSF скрипты, а что дальше делать без понятия. Я далёк от программирования, но хочу разобраться в этом.
-
- Сообщения: 7
- Зарегистрирован: 14 дек 2016 14:58
Я бы рекомендовал начать с этого: Титровальные скрипты - создание объекта шаг за шагом.Ученик писал(а):Здравствуйте. Читал здесь на форуме, что скрипты творят чудеса. Дайте ссылку или какую нибудь инструкцию для работы со скриптом. С чего начинать и как ею пользоваться. В программе FDTitleDesigner во вкладке открыл бесплатные TSF скрипты, а что дальше делать без понятия. Я далёк от программирования, но хочу разобраться в этом.
-
- Сообщения: 7091
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK