gifts2017

7.7 zoom-ZOOM. Зумируем формы в 1С

Опубликовал Алексей Плутенко (Noy) в раздел Программирование - Инструментарий

Легко и непринужденно делаем кнопки на весь экран... Зачем? Попробую объяснить!

Помню свой (не совсем свой) первый плоский монитор, который был куплен нашему генеральному директору (ясен пень - кому же еще). После первого знакомства с этим девайсом я был немного в шоке - в любом разрешении, отличном от рекомендуемого (в том частном случае 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 Добавлен самый народный метод:

УстановитьОтносительныйРазмерФормы(ШиринаВПроцентах,ВысотаВПроцентах)

позволяет установить размер формы в процентах от главного окна - ваши формы при любом разрешении экрана всегда будут одинакового размера!

Метод доступен только после физического открытия формы (процедура ПослеОткрытия и позже).

Скачать файлы

Наименование Файл Версия Размер
Демонстрационная база 188
.zip 980,74Kb
19.09.16
188
.zip 980,74Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей (Che) Коцюра (CheBurator) 10.11.09 01:46
Хорошо!
но:
1. какую обкатку прошел класс? тестировался? как долго был в пробно/боевой эксплуатации??
2. как долго будет автором поддерживаться и сопровождаться класс? как оперативно будут устраняться найденные ошибки?
..
а то ятут РедакторТЗ заюзал - ну так автор - в отрубе, ошибки самому приходилось править по мелочи, непродуманный функционал - спасибо ЕПРСТУ! - докручивать... - смысл в том, что разбираться в программах/классах - это хорошо, но хочется, чтобы это не отнимало кучу времени...
2. Сергей (Che) Коцюра (CheBurator) 10.11.09 02:20
надо попробовать.. потому как аналогичная задача и у меня...
3. Сергей (Che) Коцюра (CheBurator) 10.11.09 02:22
также было бы хорошо зумировать не только скролом мыши, нои комбинацией клаиш типа контрол+шифт+ПлюсНумпад и МинусНумпад
- комбинация клавиш - по умолчанию, если не передана классу из программы...
4. vip (vip) 10.11.09 03:58
(0) Все это хорошо, но...
Работать со шрифтами нужно крайне аккуратно.
Похвальна попытка удаления шрифтов в деструкторе, но при работе с формой вогнать систему в ступор можно очень легко.
Просто посмотри, с какой скоростью у тебя увеличивается число объектов GDI (очень наглядно, например, при зуммировании мышью).
Лимит числа объектов GDI исчерпается очень быстро.
У 1С вообще проблемы с освождением объектов GDI, а тут прямое издевательство над системой.

Кстати, название "МногострочнаяЧасть" прокатывает не на всех операционных системах.
На английской W2K3 нужно использовать "Multycolumn".

ЗЫ. Не нужно вкладывать ВК в демо, лучше дать прямые ссылки (тем более во вложении не последние версии).
JohnyDeath; Арчибальд; +2 Ответить 1
5. vip (vip) 10.11.09 04:02
(1) Про РедакторТЗ ты уже много раз отметился на всех форумах.
Уже напоминаешь известный персонаж с клювом.
Ты абсолютно не хочешь понимать разницы между пользовательскими и внутренними классами.
6. Александр Рытов (Арчибальд) 10.11.09 07:46
7. vip (vip) 10.11.09 08:15
(6) Это я-то ворчлив?
Я чего-то не то сказал?
8. Александр Рытов (Арчибальд) 10.11.09 08:46
(7) Пардон, 1-4 читать как 1-3. А с твоими словами я согласился.
9. Алексей Плутенко (Noy) 10.11.09 09:10
(1) Прям крик души...
Che, ты возьми класс на вооружение, и мы его быстро допилим
(4) Да, меня тоже несколько беспокоит вопрос с GDI (хотя я не настолько разбираюсь в архитектуре ОС). Попробую сегодня переписать - что бы не деражть в памяти лишних шрифтов. Спасибо за подсказки (про "Multycolumn" вообще не знал :o ).
10. Алексей Плутенко (Noy) 10.11.09 09:29
странно что Ёпрст поставил плюс без замечаний...
11. Епрст (Ёпрст) 10.11.09 09:30
(10) я пока обдумываю полезность..
:)
12. vip (vip) 10.11.09 10:04
(9) Про GDI поверь на слово.
Проблема действительно очень серьезная. Сталкивался сам.
Проявится или падением 1С с ошибкой в bkend.dll или полным ступором Windows с пропаданием иконок на кнопках и т.п.
13. Алексей Плутенко (Noy) 10.11.09 10:51
(12) Диспетчера задач (taskman) достаточно для отслеживания GDI, или надо применять спецсофт для отладки подобной бяки?
14. Алексей Плутенко (Noy) 10.11.09 11:01
Поправил и перезалил файл - теперь (судя по taskman) GDI в порядке!
15. vip (vip) 10.11.09 11:30
(13) Достаточно.
(14) К сожалению проверить не могу, по доступу к скачиванию приравнен к лишенцам.
17. vip (vip) 10.11.09 11:47
(16) Сенькс.
(0) Вот теперь грамотно.
18. Алексей Плутенко (Noy) 10.11.09 12:08
(17) сенькс.

всем:
Планирую добавить в параметр РежимЗумирования значение "Программно" и метод УстановитьРазмерФормы(ВПроцентахОтОригинальногоРазмера). Как думаете - полезный метод?
19. vip (vip) 10.11.09 12:12
20. Сергей (Che) Коцюра (CheBurator) 10.11.09 15:19
(5)
Ты абсолютно не хочешь понимать разницы между пользовательскими и внутренними классами.

- а ты объясни. РедакторТЗ - это пользовательский класс - т.е. который я могу при необходимости поправить/изменить или написать новый.
.
а то я что я дятел -так это - ничего страшного. если выкладывается одним умным дятлом недодолбленный продукт - то другим дятлам (не таким умным) приходится его долбить самим, долго и упорно. а то пчто при этом - стук по всему лесу - не вижу ничего зазорного сообщать что умный дятел выложил недопиленный продукт.
.. вот так вот ;-) долблю в меру своих сил... ибо, как показывает опыт - проблемы других решаются не сильно охотно/быстро...
21. Сергей (Che) Коцюра (CheBurator) 10.11.09 15:27
(18)
Планирую добавить в параметр РежимЗумирования значение "Программно" и метод УстановитьРазмерФормы(ВПроцентахОтОригинальногоРазмера). Как думаете - полезный метод?

- думаю да. Также думаю, что было бы очень полезно типа Зум.ЗазумироватьДоРазмеровРодительскогоОкнаИотцентрировать() - т.е. форма масштабируется так, чтобы максимально возможно вписаться в размер родительского окна и при этом центрируется. - получим аналог "разворота на весь экран" - но аналог намного более полезный!!!! - автоматом решится проблема дизайна форм под разные разрешения...!!!
(правда при этом на больших экранах некоторые формы получатся НУ ОЧЕНЬ КРУПНЫМИ! но это - не беда!!!)
.
- даешь поголовное зумирование!!!!
22. Алексей Плутенко (Noy) 10.11.09 15:29
(21)
т.е. форма масштабируется так, чтобы максимально возможно вписаться в размер родительского окна и при этом центрируется

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

Если так - то как раз такая же мысль посетила ;)
сделаю!
23. Сергей (Che) Коцюра (CheBurator) 10.11.09 15:50
(22) эээ немножко не так... (???)
сначала - увеличивается форма-подложка
потом на форме - масштабируются элементы формы...
потом форма - центируется - получаем окно на "весь экран" но оно при этом не максимизировано!
.
а то что ты пишешь можно интепрретировать так - что в родительском окне я увижу ТЗ или кнопку (один или нескольок элементов фомы - но не все!) - которые увеличиены "до максимума".
.
т.е. например я сдизайнерил формочку для 800*600, запускаю ее на 1024-768 - жмиак кнопку! она у меня пропорционально увеличилась до полного вписывания в родительское окно!
(ну и наоборот) - если форма вдруг здизайнерена для 1024-768, я жмакая - получаю пропорциаонально смасштабированную до 800*600 (правла при этом все может получиться мелко-мелко - но это уже другой вопрос - я же тогда могу зазумировать! ту часть которая мне нужна!!!)
.
а то сидел у клиента - наваял форму ему для удобства под большой экран, домой принес - а у меня разрешение-то поменьше... не влазит.. пришлось передизайнерять...

- что реально имеется в виду?
24. Алексей Плутенко (Noy) 10.11.09 15:57
т.е. например я сдизайнерил формочку для 800*600, запускаю ее на 1024-768 - жмиак кнопку! она у меня пропорционально увеличилась до полного вписывания в родительское окно!


ну это вроде как и реализовано...


я же тогда могу зазумировать! ту часть которая мне нужна!!!)

А вот это сложнее - мой класс зумирует все элементы формы


давай я обновлю класс (думаю через минут 30 будет готово) - тогда скачаешь и обсудим
25. Алексей Плутенко (Noy) 10.11.09 18:11
Обновил:

Добавился метод ЗумироватьЭлементы(ПроцентЗумированияГ=100,ПроцентЗумированияВ=100) для программного зумирования элементов (как по горизонтали, так и по вертикали)

Добавился параметр Центрировать (флаг - 1 или 0) - отвечает за центрирование элементов на форме.

Изменено интерактивное изменение зума: зажатая кнопка Ctrl и колесо мыши для пропорционального зумирования, Ctrl+Alt+колесо мыши - для зумирования только по горизонтали, Ctrl+Shift+колесо мыши - только по вертикали.

Также обновлена демка
26. vip (vip) 10.11.09 18:17
(23) > - что реально имеется в виду?

Реально имеется в виду то, что я давно себе сделал - форма подстраивается под разрешение юзерского монитора.

И ты бы давно такое сделал, если бы не гремел во все панфары на всех форумах про глючность каких-то там пользовательских классов (которые никто тебя не заставляет использовать).
Я, кстати, ни один пользовательский класс не использовал и не буду. Гораздо проще написать свое, чем разгребать чужое.
27. vip (vip) 10.11.09 18:19
(25) Совет - не усложняй.
Никто не запомнит таких сочетаний клавиш. И, соответственно, пользоваться никто не будет.
28. Сергей (Che) Коцюра (CheBurator) 10.11.09 18:24
(25) центрирование элементов на форме????? то есть элементы формы при зуммировании формы не зумируются а просто в центр помещаются? круто!!! ;-)
29. Сергей (Che) Коцюра (CheBurator) 10.11.09 18:28
(26) угу.. не заставляет использовать.. угу .. согласен... однако же - я же не просто ору все плохо - в редакторе классов - я привел целый сонм глюков и недоделок... автор - молчит...
отсюда пролонгируя - нафига тогда вообще 1С++ - будет глюк всплыт - к кому стучаться, когда исправят? или все как обычно - никто ничего ни за что не отвечает...??? - меня вот это больше всего напрягает... что используя доработки платформы - надо кучу костыликов вокруг понаставлять...
.
а что делать? будем плакать и жрать кактус.. ;-)
.
кстати, сейчас оцениваю время как переломное в плане 7 в 8 - народ потихоньку мигрирует на 8-ку... и тех, кто будет дорабатывать и развивать и своевременно СМОЖЕТ оказать помощь по 7.7 с "докурутками" в плане 1С++ и других полезных вещей - будет все меньше и меньше.. это и сейчас уже чувствуется...
30. Александр Рытов (Арчибальд) 10.11.09 18:31
+(27) Лучшее - враг хорошего, имхо. :)
31. vip (vip) 10.11.09 18:49
(29) 1. Опять путаешь возможности 1С++ и возможности узкого прикладного авторского решения.
2. Про 8. Вот уж от тебя не ожидал.
Хоть убей, не замечаю тенденции. За исключением ларечников и суперпродвинутых.
Не хочу разводить холивар. С задачами моих рабочих, весьма крупных проектов (никакого отношения не имеющих к классической торговле, например) прекрасно справляется семерка.
32. Сергей (Che) Коцюра (CheBurator) 10.11.09 18:56
(31) по (29) покажи мне возможности 1С++ отдельно от прикладного решения. Да, что-то наверное есть, что дает сам факт подключения внешней компоненты (типа турбобл), но все остальное - оно живет отдельно от прикладных решений?

2. да и для моих решений 7.7 - вполне хватает. +напрягает то, что прикладного чего-то нового на 8-ке - НУ ОЧЕНЬ МАЛО.
33. vip (vip) 10.11.09 19:40
(32) Полностью откажись от чужого прикладного решения. И я с удовольствием помогу.
2. Судя по всему, долгожданный прорыв только в 8.2. Предыдущие версии восьмерки от лукавого. Только надо учитывать, что типовое решение от 1С это идеал. Потенциал 8.х очень велик.
34. Сергей (Che) Коцюра (CheBurator) 10.11.09 21:05
(33) по (32) хитрый какой ;-)
готов отказаться от редактораТЗ при предоставлении сопоставимого функционала. - это значит, что подключение и использование данного сопоставимого функционала по количеству строк д.б. не более 10-15 строк кода. - класс редакторТЗ вот этим мне и понравился (пару строк на подключение - дальше сам все делает...)... - что предложите взамен??? (ТП и ТЗ в качестве поставщика данных?)
35. Алексей Плутенко (Noy) 11.11.09 11:14
11.11.09 Добавлен самый народный метод:

УстановитьОтносительныйРазмерФормы(ШиринаВПроцентах,ВысотаВПроцентах)

позволяет установить размер формы в процентах от главного окна - ваши формы при любом разрешении экрана всегда будут одинакового размера!

Метод доступен только после физического открытия формы (процедура ПослеОткрытия и позже).
36. Сергей (Che) Коцюра (CheBurator) 12.11.09 02:10
такс.. хотел в субботу испытать, но придется отложить ибо занят...
нов копилку...
37. Аркадий Кучер (Abadonna) 13.11.09 12:12
(21)>- даешь поголовное зумирование!!!!
Слепошарых надо с работы гнать, а не зуммировать :D
38. Олег Пономаренко (O-Planet) 15.11.09 15:50
Меня волнует больше другое. Почему до сих пор ни кто не написал, что 7.7 уже не актуальна? :?: :D
39. script Мальчинко (script) 15.11.09 23:12
Потому что никто с этим не согласен. :!:
iddqd; Зеленоград; astonvilla; Ёпрст; urmir; wing; Boog; SPonomareff; +8 Ответить
40. nicolas eliseev (nicxxx) 03.11.10 10:21
(37) я конечно некропостер....но за такие слова не грех в голову с ноги зарядить
41. Sasha Pro (San40s) 21.03.12 12:17
(38) O-Planet,
Я думаю 7.7 будет актуальна еще долго.
42. Юрий Семенчук (MsDjuice) 16.12.13 15:02
Очень помогла разработочка, спасибо.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа