"Бегущая Строка" - алгоритм подсчета времени показ
Модераторы: Людмила, PR, vd, Даниленко Сергей
-
- Сообщения: 150
- Зарегистрирован: 22 янв 2008 08:51
- Откуда: Новокузнецк
"Бегущая Строка" - алгоритм подсчета времени показ
Вопрос следующий:
есть титровальный объект "Бегущая строка". Хотелось бы получить алгоритм подсчета времени показа строки на экране. Т.е. в идеале - тот алгоритм, согласно которому подсчитывается время в окошке "Длительность" в своействе объкта в Title Designer'e, в зависимости от входных данных - содержимого файла задания, значений скорости, параметров шрифта, размеров титровального объекта и т.п.
Нужно это для использования в самописной программе приема бегущей строки для подсчета длительности объявления на этапе приема.
есть титровальный объект "Бегущая строка". Хотелось бы получить алгоритм подсчета времени показа строки на экране. Т.е. в идеале - тот алгоритм, согласно которому подсчитывается время в окошке "Длительность" в своействе объкта в Title Designer'e, в зависимости от входных данных - содержимого файла задания, значений скорости, параметров шрифта, размеров титровального объекта и т.п.
Нужно это для использования в самописной программе приема бегущей строки для подсчета длительности объявления на этапе приема.
-
- Сообщения: 7091
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK
-
- Сообщения: 150
- Зарегистрирован: 22 янв 2008 08:51
- Откуда: Новокузнецк
-
- Сообщения: 7091
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK
-
- Сообщения: 150
- Зарегистрирован: 22 янв 2008 08:51
- Откуда: Новокузнецк
-
- Сообщения: 7091
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK
Все было бы просто если бы вы использовали в качестве задания для бегущей строки картинку (т.е. из текста создавали бы картинку с этим текстом). Длина картинки известна, соответственно все остальное рассчитывается с помощью достаточно простой формулы. Но и тут есть проблема - как узнать длину картинки? У нас как раз это делается через наши СОМ-объекты.
Гораздо сложнее дело обстоит если в качестве задания для бегущей строки вы используете текст. В этом случае задание для бегучки генерится "на лету". Поэтому для получения размера изображения как раз и нужны СОМ-объекты. Они позволяют получить размер объявления с учетом стиля объявления.
Гораздо сложнее дело обстоит если в качестве задания для бегущей строки вы используете текст. В этом случае задание для бегучки генерится "на лету". Поэтому для получения размера изображения как раз и нужны СОМ-объекты. Они позволяют получить размер объявления с учетом стиля объявления.
-
- Сообщения: 150
- Зарегистрирован: 22 янв 2008 08:51
- Откуда: Новокузнецк
-
- Сообщения: 7091
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK
На С++ мы бы сделали примерно так:
/* Подключение объекта DDSString (содержится в C:\Program Files\Common Files\SoftLab-Nsk\DDSString.dll)
*/
#import "libid:2EDA011D-CCB1-4C0A-9C84-2569D5504D9A" no_namespace named_guids raw_interfaces_only
/*
Загрузка колекции стилей "fileName", которая используется для показа объявлений. Естественно, что эту процедуру можно делать один раз
*/
CComPtr<IDDSStringObj> spIDDSStringObj;
HRESULT hr = spIDDSStringObj.CoCreateInstance(CLSID_DDSStringObj);
hr = spIDDSStringObj->LoadStyleCollection(CComBSTR(fileName));
hr = spIDDSStringObj->get_StyleCount(&nStyleCount);
/*
Получение размеров картинки: стиль-styleIndex, строка с объявлением -name.
*/
hr = spIDDSStringObj->put_SelectedStyleIndex(styleIndex);
hr = spIDDSStringObj->SetString(CComBSTR(name));
CRect rcBlackArea;
hr = spIDDSStringObj->GetBlackAreaRect(&rcBlackArea, TRUE);
/*
В прямоугольнике rcBlackArea возвращается размеры картинки с объявлением.
*/
Как это делать на 1С мы не знаем.
Если вы пройдете этот этап - до получения прямоугольника по строчке текста, то мы можно продолжать дальше.
/* Подключение объекта DDSString (содержится в C:\Program Files\Common Files\SoftLab-Nsk\DDSString.dll)
*/
#import "libid:2EDA011D-CCB1-4C0A-9C84-2569D5504D9A" no_namespace named_guids raw_interfaces_only
/*
Загрузка колекции стилей "fileName", которая используется для показа объявлений. Естественно, что эту процедуру можно делать один раз
*/
CComPtr<IDDSStringObj> spIDDSStringObj;
HRESULT hr = spIDDSStringObj.CoCreateInstance(CLSID_DDSStringObj);
hr = spIDDSStringObj->LoadStyleCollection(CComBSTR(fileName));
hr = spIDDSStringObj->get_StyleCount(&nStyleCount);
/*
Получение размеров картинки: стиль-styleIndex, строка с объявлением -name.
*/
hr = spIDDSStringObj->put_SelectedStyleIndex(styleIndex);
hr = spIDDSStringObj->SetString(CComBSTR(name));
CRect rcBlackArea;
hr = spIDDSStringObj->GetBlackAreaRect(&rcBlackArea, TRUE);
/*
В прямоугольнике rcBlackArea возвращается размеры картинки с объявлением.
*/
Как это делать на 1С мы не знаем.
Если вы пройдете этот этап - до получения прямоугольника по строчке текста, то мы можно продолжать дальше.
-
- Сообщения: 56
- Зарегистрирован: 18 апр 2009 15:19
- Откуда: Электросталь
- Контактная информация:
-
- Сообщения: 7091
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK
-
- Сообщения: 150
- Зарегистрирован: 22 янв 2008 08:51
- Откуда: Новокузнецк
-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21
Это разный синтаксис вызова. В вашем случае (видимо, как и при вызове из скриптовых языков) нужно именно через свойство получать/устанавливать значение (просто получать либо присваивать его значение).
В программе на C++ это же делается через вызов функций get_StyleCount и put_StyleCount.
То же относится и ко всем другим подобным случаям, т.е. синтаксис получения значения других свойств аналогичен.
В программе на C++ это же делается через вызов функций get_StyleCount и put_StyleCount.
То же относится и ко всем другим подобным случаям, т.е. синтаксис получения значения других свойств аналогичен.
-
- Сообщения: 150
- Зарегистрирован: 22 янв 2008 08:51
- Откуда: Новокузнецк
Эх... Был бы еще в 1С-ке тип CRect... Все получилось остальное - а вот переменную для возврата в неё данных метод GetBlackAreaRect хочет именно такого типа...
В связи с этим очень наивный вопрос... Нельзя ли как-нибудь модифицировать DLL-ку эту, чтобы она отдавала длину и высоту прямоугольника в виде свойств? Или в параметрах процедуры, только чтобы они были простого типа?
Я как бы параллельно пытаюсь написать какую-нить прокладку между 1С и DLL-кой этой - внешнюю компоненту, или еще чего - пока не определился. Но если у Вас есть возможность сделать это быстро и просто - буду признателен
В связи с этим очень наивный вопрос... Нельзя ли как-нибудь модифицировать DLL-ку эту, чтобы она отдавала длину и высоту прямоугольника в виде свойств? Или в параметрах процедуры, только чтобы они были простого типа?
Я как бы параллельно пытаюсь написать какую-нить прокладку между 1С и DLL-кой этой - внешнюю компоненту, или еще чего - пока не определился. Но если у Вас есть возможность сделать это быстро и просто - буду признателен
-
- Сообщения: 7091
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK
Ваше желание понятно, но обычно в таких ситуациях поступают по другому. А именно - пишут библиотеку-прокладку, которая понимает один тип данны (Rect), но возвращает его в виде набора других типов (INT). Впрочем про это вы сами написали.Нельзя ли как-нибудь модифицировать DLL-ку эту, чтобы она отдавала длину и высоту прямоугольника в виде свойств? Или в параметрах процедуры, только чтобы они были простого типа?
-
- Сообщения: 150
- Зарегистрирован: 22 янв 2008 08:51
- Откуда: Новокузнецк