Версия для печати темы (https://pro1c.org.ua/index.php?s=812939bd2bf17ec1fe53ad0a35cd2c5f&showtopic=14646)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Программное масштабирование элементов табличного документа
Автор: logist 04.10.13, 14:26
Необходимы какие-то идеи.
Есть некий табличный документ, который содержит картинку как фон (РисунокТабличногоДокумента расятнутый на видимую область) и элементы типа РисунокТабличногоДокумента наложенные на фон. Все это создается пользователем в поле Табличного документа в режиме редактирования. Необходимо в зависимости от разрешения монитора и размеров отображаемого поля табличного документа программно масштабировать элементы таким образом что бы они все были в видимой части. Табличный документ может открываться в окнах и отображаться в полях разного размера.
Разрешение монитора получить не проблема, и высчитать его ширину и высоту в миллиметрах. Когда идет работа только с табличным документом (режим редактирования), т.е. когда он открыт в отдельном окне, можно каким-то тупым путем рассчитать высоту поля и отобразить, но вот потом этот табдок может открываться в поле других форм, и/или на мониторах другого разрешения, как смасштабировать элементы в этом случае (и не понятно - как получить размеры поля в котором он отображается). Создавать табдоки для каждого варианта монитора как-то не хочется (не практично, и пользователю это не удобно)
Автор: Ardi 04.10.13, 14:33
Кэп предлагает: "Таблица\Вид\Масштаб".
Автор: logist 04.10.13, 14:38
Цитата(Ardi @ 04.10.13, 15:33)
Кэп предлагает: "Таблица\Вид\Масштаб".
Хорошо Кэп, я подредактировал сообщение. Необходимо программно масштабировать.
Автор: Домовик 04.10.13, 15:00
а размер изображений внутри имеют право меняться?
Если да, то задать для каждого внутреннего изображения коэффициентШиринаИзображения, КоэффВысотаИзображения, КоэффПоложениеШирина, КоэффициентПоложениеВысота.
Первые два - сжимать/ увеличивать внутренний рисунок. если равен 1 - размер внешнего рисунка на максимальное разрешение.
Вторые два - точка положения рисунка, относительно точки внешнего рисунка. но тут еще смутно, нужно думать, знать возможности средств восьмерки
там еще прикольное свойство есть у картинки "РазмерКартинки". Для внешней картинки "Растянуть", для внутренних "пропорционально", но внутренние уже изначально отредактировать в редакторе их положение и размер под внешнюю картинку. но это не будет программное маштабирование.
Автор: logist 04.10.13, 15:18
Коэффициент от чего? Если бы было все так просто. Я не могу знать размеры поля в котором будет отображаться табдок...
Автор: Zaval 04.10.13, 15:26
Почему? Поле - это же элемент формы?
Автор: Petre 04.10.13, 15:37
Цитата(Zaval @ 04.10.13, 16:26)
Почему? Поле - это же элемент формы?
Это при открытии. А что делать, если пользователь растягивает форму? Каким событием это отловить?
Автор: logist 04.10.13, 15:39
Цитата(Zaval @ 04.10.13, 16:26) http://pro1c.org.ua/index.php?act=findpost&pid=75728
А что делать, если пользователь растягивает форму? Каким событием это отловить?
В моем случае этого не надо отлавливать, формы открываются на весь экран и их изменение запрещено.
Автор: Petre 04.10.13, 15:44
Ну тогда: "ЭтаФорма.ЭлементыФормы.ПолеТабличногоДокумента.Ширина" ("*.Высота") в пунктах.
Автор: Fynjy 04.10.13, 18:31
Цитата(logist @ 04.10.13, 15:26)
Необходимы какие-то идеи.
Есть некий табличный документ, который содержит картинку как фон (РисунокТабличногоДокумента расятнутый на видимую область) и элементы типа РисунокТабличногоДокумента наложенные на фон. Все это создается пользователем в поле Табличного документа в режиме редактирования. Необходимо в зависимости от разрешения монитора и размеров отображаемого поля табличного документа программно масштабировать элементы таким образом что бы они все были в видимой части. Табличный документ может открываться в окнах и отображаться в полях разного размера.
Разрешение монитора получить не проблема, и высчитать его ширину и высоту в миллиметрах. Когда идет работа только с табличным документом (режим редактирования), т.е. когда он открыт в отдельном окне, можно каким-то тупым путем рассчитать высоту поля и отобразить, но вот потом этот табдок может открываться в поле других форм, и/или на мониторах другого разрешения, как смасштабировать элементы в этом случае (и не понятно - как получить размеры поля в котором он отображается). Создавать табдоки для каждого варианта монитора как-то не хочется (не практично, и пользователю это не удобно)
Посмотрите, как реализовано со штрихкодом в восьмерке - по сути тот же рисунок, с изменяемыми в зависимости размера бумаги размерами.
По поводу масштаба ctrl+колесо мыши - sendkeys спасет отца русской демократии ...
Автор: Elstan 31.10.13, 9:39
Есть полезная встроенная функция ПолучитьИнформациюЭкрановКлиента(), возможно это то, что вам нужно.
Автор: logist 31.10.13, 10:31
Цитата(Elstan @ 31.10.13, 10:39)
Есть полезная встроенная функция ПолучитьИнформациюЭкрановКлиента(), возможно это то, что вам нужно.
Очень хорошо, что у 1С есть такая полезная функция
Правда возвращает она только три параметра.
У меня это реализовано через
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.Language = "VBScript";
Локатор = Новый ComОбъект("WbemScripting.SWbemLocator");
WMIСервис = Локатор.ConnectServer(".","root\cimv2");
Мониторы = WMIСервис.ExecQuery("SELECT * FROM Win32_DesktopMonitor");
"Мониторы" возвращает куда большей всякой информации. Но это все на данном этапе пока не нужно, возможно будет принято другое решение, без необходимости масштабировать.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua