Помню свой (не совсем свой) первый плоский монитор, который был куплен нашему генеральному директору (ясен пень - кому же еще). После первого знакомства с этим девайсом я был немного в шоке - в любом разрешении, отличном от рекомендуемого (в том частном случае 1024х768) картинка размытая до рези в глазах - работать практически невозможно. Конечно, мои авторитетные заявления боссу, что "чем меньше шрифт - тем больше видно информации" возымели определенный эффект, но мой энтузиазм по поводу закупки новейших мониторов быстро сник - я представил себе определенную часть наших пользователей (которые и в разрешении 800х600 посдлеповато щурятся в монитор) истошно вопящую "верни все взад". Тогда я не знал как решить эту проблему, а опыт и знания, к сожалению, приходят только со временем.
И вот буквально на днях пришлось столкнуться с похожей проблемой: готовлю к открытию небольшой склад-магазин с тремя кассами. В качестве POS-терминалов стандартные компы, но два из них с 15" ЭЛТ мониторами (типа для оптового отдела - никто их не увидит) и один "парадный" - современный 19" монитор, нормально показывающий только в HD-Ready (1376x768 или около того). Понятно что работают все в одной базе, а разбег между разрешениями велик - вот и пришлось что-то универсальное "мутить".
Это было небольшое отступление, а теперь более конкретно:
Представляю класс 1С++ (рабочее название Общие.Форма.Зум), позволяющий изменять размеры и шрифты элементов формы. Класс предназначен не только для решения проблем, описанных выше - это был всего лишь пример.
Методы класса:
- Подключить(Контекст); подключает класс
- Отключить(Контекст); отключает класс (вызов необязателен)
- УстановитьШрифтАтрибута(Атрибут="Форма",Имя="MS Sans Serif",Размер=8,Жирный=0,Курсив=0,Подчеркивание=0,Зачеркивание=0)
Устанавливает шрифт для атрибута формы. Для указания шрифта самой формы в параметре Атрибут необходиму указать строку "Форма". Для указания шрифта многострочной части в параметре Атрибут необходиму указать строку "МногострочнаяЧасть".
Значение по умочанию:шрифт "MS Sans Serif", размер 8 пунктов.
Для элементов, не определенных данным методом применяется шрифт, установленный для формы.
Все параметры необязательны. Вызов метода не обязателен.
Параметры класса:
РежимЗумирования строка - возможные значения: "Авто", "Вручную"
При значении "Авто" - размеры элементов автоматически зумируются соотвественно изменению размеров самой формы относительно размеров, заданных в конфигураторе. При значении "Вручную" - элементы формы зумируются с помощью комбинации: зажатая кнопка Ctrl и скрол колесом мыши.
Значение по умолчанию "Авто".
СохранятьПропорции Число - Флаг сохранения пропорций элементов (0,1). По умолчанию-0.
Теперь немного подробнее про УстановитьШрифтАтрибута(): Этот метод используется для задания начального значения шрифта. Тоесть если вся форма имеет размер шрифта 8 (по умолчанию в формах 1С 7.7), а для Многострочной части отдельно задать размер шрифта 10, то при увеличении размеров формы в два раза - все элементы будут прозумированы до размера шрифта 16, а многострочная часть - до размера в 20 пунктов.
Использовать класс в своей форме элементарно просто:
Процедура ПриОткрытии()
Зум=СоздатьОбъект("Общие.Форма.Зум");
Зум.Подключить(Контекст);
Зум.УстановитьШрифтАтрибута("МногострочнаяЧасть","Times New Roman",10); //так мы описываем элементы, отличные по оформлению от формы
КонецПроцедуры
Для внедрения в свою конфигурацию скопируйте Процедуру ПриНачалеРаботыСистемы и две обработки из текущей конфы. И не забудьте положить в каталог базы файлы 1cpp.dll и Formex.dll (мой респект разработчикам!)
Во вложении демонстрационная база вместе с ВК 1С++ и Formex
На всякий случай: я знаю про возможность менять шрифт форм в 1С:Предприятие (Сервис-Параметры) и про класс "Общие.Форма.Привязка" тоже в курсе, но эти методы не полностью решали мои задачи. И вообще - это мой первый класс 1С++ ;)
Обновил:
Добавился метод ЗумироватьЭлементы(ПроцентЗумированияГ=100,ПроцентЗумированияВ=100) для программного зумирования элементов (как по горизонтали, так и по вертикали)
Добавился параметр Центрировать (флаг - 1 или 0) - отвечает за центрирование элементов на форме.
Изменено интерактивное изменение зума: зажатая кнопка Ctrl и колесо мыши для пропорционального зумирования, Ctrl+Alt+колесо мыши - для зумирования только по горизонтали, Ctrl+Shift+колесо мыши - только по вертикали.
11.11.09 Добавлен самый народный метод:
УстановитьОтносительныйРазмерФормы(ШиринаВПроцентах,ВысотаВПроцентах)
позволяет установить размер формы в процентах от главного окна - ваши формы при любом разрешении экрана всегда будут одинакового размера!
Метод доступен только после физического открытия формы (процедура ПослеОткрытия и позже).