Масштабирование шрифта

08.06.21

Разработка - Инструментарий разработчика

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

Скачать исходный код

Наименование Файл Версия Размер
Масштабирование шрифта.:
.zip 167,23Kb
4
.zip 167,23Kb 4 Скачать

В постановке задачи и реализации принимал участие Сергей Коцюра (CheBurator).

Задача:

На форме есть текстовое поле (текстовый атрибут, "Т" на панели инструментов конфигуратора). Текущий текст во время исполнения определяется динамически, т.е. длина выводимого на форму текста может быть произвольной (в разумных пределах).

Требуется обеспечить масштабирование шрифта так, чтобы текущий текст полностью помещался в отведенное для его отображения текстовое поле с максимально возможным размером шрифта. Для чего: если текст короткий - выводится крупным шрифтом, если текст длинный - выводится шрифтом помельче. При этом обеспечивается равномерное заполнение текстового поля. Решение, продемонстрированное в данной задаче, может применяться, например, для построении фиксированных экранных форм для АРМ или ТСД.

Примечание:

Аналогичная задача ранее успешно была решена для автомасштабирования шрифтов для вывода на печать этикеток товаров с гарантированным размещением полного названия/описания товара в отведенное поле.

См. публикацию: //infostart.ru/public/181223 .

Вызов функции:

хЗаголовок(хФорма,хЦель,хТекст,хШрифты,хРежим=0)

Параметры:

хФорма - Передаётся ключевое слово "Форма" (без кавычек).

хЦель - Символьная строка содержащая имя текстового атрибута на форме.

хТекст - Символьная строка для отображения в текстовом атрибуте формы. В любом месте текста допускается использование специального символа - Симв(1). Это обеспечивает запрет разрыва следом идущего текст (до пробела или РазделительСтрок) на отдельные слова. Если требуется не разбивать на слова часть текста, то эту часть можно подготовить оператором:

КусокТекста=" "+Симв(1)+СтрЗаменить(ЧастьТекста," ",Симв(160))+" ";

или

КусокТекста=" "+Симв(1)+СтрЗаменить(ЧастьТекста," ",Симв(160))+РазделительСтрок;

хШрифты - Список значений заполненный шрифтами для подбора размера текст. Размер шрифтов должен быть в нарастающей последовательности размеров. Последним элементом списка значения следует добавить шрифт, которым будет отображаться текст в случае аварийного завершения функции хЗаголовок. Список значений можно, например, подготовить операторами:

Для К=6 По 30 Цикл

хШрифты.ДобавитьЗначение(ФормСервис.СоздатьШрифт("Arial",К),Строка(К));

КонецЦикла;

хШрифты.ДобавитьЗначение(ФормСервис.СоздатьШрифт(),Строка(0));

В символьное представление значения элемента (второй параметр метода ДобавитьЗначение) списка значение надо поместить размер шрифта как число преобразованное к строке.

хРежим - Задаёт режим работы функции:

=0 - Текст отображается шрифтом максимального размера без разбиения длинных слов. Длинные слова могут вылезти (обрезаться) за ширину области текстового атрибута формы. Если в хТекст присутствует "специальный символ", то он не оказывает влияния на алгоритм работы функции хЗаголовок и не отображается в текстовом атрибуте формы.

>0 - Текст отображается шрифтом максимального размера с разбиением длинных слов. Запретить разбиение длинных слов можно путём использования специального символа (подробнее см. в описании параметра хТекст). Если длинное слово не помещается в область текстового атрибута формы по ширине, то подбирается шрифт меньшего размера для размещения длинного слова без вылезания (обрезания) за ширину области текстового атрибута формы.

<0 - Режим аналогичен режиму, когда хРежим>0.

Возвращает:

<0 - Никогда не возвращается.

=0 - Произошёл сбой (см. раздел "Ограничения") при выполнении функции и текст отображён шрифтом "аварийного завершения".

>0 - Номер элемента списка значений хШрифты, которым удалось отобразить текст.

Решение:

Перед чтением, ниже идущего описания способа решения задачи, рекомендуется выполнить внешнюю обработку "ДемоМасштаб.ert" и заглянуть в её реализацию .

0) Суть решения сводится к анализу наполненности выводимым текстом прямоугольной области, лежащей ниже текстового поля. Если в этой области что-то есть - значит текст не влез в отведенное ему текстовое поле и надо уменьшить шрифт (при подборе шрифта от бОльшего к меньшему).

1) На форме имеется (размешается "проектировщиком" формы) текстовый атрибут (назовем его - хЦель).

2) Создаётся (при выполнении алгоритма) рабочий/временный атрибут (назовем его - хВизир) равный по размеру атрибуту хЦель и расположенный в тех же координатах формы.

3) Запускается цикл по списку значений (создаётся пользователем функции хЗаголовок) в котором содержатся шрифты в нарастающей последовательности размеров. Список используемых шрифтов подготавливается заранее, с использованием метода СоздатьШрифт объекта Сервис внешней компоненты FormEx™.

4) На очередной итерации цикла определяется высота шрифта. Высота атрибута хВизир увеличивается на высоту шрифта с сохранением его положения на форме (верхнего-левого угла и ширины).

5) Для атрибута хВизир устанавливается шрифт из элемента списка значений.

6) Выполняется оператор хВизир.Заголовок="". И сохраняется методом Save внешней компоненты MagicEsc в оперативной памяти прямоугольник экрана (назовем его хДельта), расположенный в области атрибута хВизир ниже начальной (равной высоте атрибута хЦель) высоты этого атрибута.

7) Выполняется оператор хВизир.Заголовок =хТекст для заполнения атрибута требуемым в задаче текстом. И производится сравнение методом Compare внешней компоненты MagicEsc равенства "пустого" прямоугольника экрана и прямоугольника, в котором мог появиться "кусок" хТекста.

8) В зависимости от результата сравнения выполняются следующие действия. При равенстве прямоугольников экрана цикл продолжается. Т.е. текст выведенный данный шрифтом в хВизир уместится целиком в атрибуте хЦель. В противном случае используется шрифт из предыдущей итерации цикла для установки его атрибуту хЦель и выполняется оператор хЦель.Заголовок =хТекст с завершением цикла подбора шрифта.

Ограничения:

Предлагаемый алгоритм успешно работает, если область экрана хДельта полностью видна на экране. Т.е. окно с формой не свёрнуто, хДельта не закрыта другим изображением, не сдвинута (полностью или частично) за пределы экрана (модальный режим) или за пределы основного окна сессии 1С. Для обхода этого ограничения в алгоритме производится проверка не "видимости" области хДельта с "аварийной" выдачей хТекст предопределённым для этого случая шрифтом.

Используемые внешние компоненты:

1) FormEx™: http://www.dorex.pro/?projects&formex

2) Внешняя компонента MagicEsc: //infostart.ru/public/103866

Протестировано на FormEx™ версий: 133, 140, 141.

См. также

Консоль запросов

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Консоль запросов к базе SQL, не требующая внешних компонент

10 стартмани

29.04.2015    21696    55    Gvozdod    8    

15

StartManager 1.4 - Развитие альтернативного стартера

Инструментарий разработчика Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.

1 стартмани

23.04.2014    166679    1869    Alexoniq    1596    

496

Tray Informer

Инструментарий разработчика Платформа 1С v7.7 Платформа 1С v8.3 Россия Абонемент ($m)

Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))

1 стартмани

04.09.2013    33087    61    O-Planet    78    

49

Изменение структуры баз 1С 7.7 без долгой реструктуризации. Часть 1. Справочники

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.

1 стартмани

13.08.2013    21313    Reptile    5    

35

v7.7 1CDialogControls: Инструмент в помощь разработчику на 7.7.

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Давным давно, когда я еще плотно писал на 7.7 работа с формами была мучительной и неудобной. Приходилось каждый элемент выкладывать, выравнивать на форме ручками, прописывать код в модуле. Иногда при разработке очередной формы приходила в голову мысль: "а где-то я уже похожее делал..." и начинался мучительный поиск подходящего кода в своих запасах........

1 стартмани

21.02.2013    18103    36    MarSeN    14    

16

[Разработчику] Любая таблица значений в OLAP

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.

1 стартмани

21.12.2012    36158    51    venger    7    

23

Библиотека кода 1С 7.7 (накопленная за 8 лет)

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Весь код на 1С 7.7, собранный для повторного использования за 8 лет работы.

10 стартмани

25.11.2012    35125    248    adhocprog    51    

70
Оставьте свое сообщение