Если мы правильно поняли, у Вас поля не привязаны к переменным и только отображают текст. Пример проекта для последней версии 2.6.14.0 во вложении. В примере значения по-умолчанию для полей равны 99, 88, 77 (при необходимости можно для каждого поля задать разные значения). Их можно изменить, а затем нажать "Сброс", либо "Сбросить все".
Спасибо за ответ. Ваше решение почти то, к которому стремлюсь я, за исключением двух "нюансиков":
1. Поля привязаны к переменным (привязываются при инициализации автоматически, примерно как в вашем скрипте при сбросе перебор полей, а не через подстановки)
2. Значение после сброса у каждого поля своё и берется их других переменных (т.е. дополнительная переменная уже занята полезным делом)
в текущих версиях Simple-Scada нет возможности через скрипты корректно изменить размеры окна
Да это уже понятно, и было понятно даже раньше. Мой жуткий костыль просто попытка обойти проблему, вряд ли он вообще пригодится, т.к. все равно положение окна невозможно задать правильно.
А проблема с окнами вот в чем: есть, допустим, объект, управляемый ПИД-регулятором. Так вот, оператору по клику на объекте должно открываться окно только с заданием ПИД-а и текущим значением регулируемого параметра, а наладчику в этом окне должна быть кнопка "Параметры ПИД", и, соответственно, по клику на ней должны появляться поля с параметрами регулятора. В других SCADA по кнопке окно увеличивается, и на нем становятся видны ранее невидимые элементы, вот и всех делов. В Simple-Scada по кнопке придется открывать другое окно, положение которого невозможно правильно установить, т.е. объект в правом верхнем углу, его окно для оператора примерно там же, а окно с параметрами для наладчика будет в центре... не логично, и не удобно. И как быть с закрытием окон "не по порядку" или не закрытием их вообще? В общем, криво все выходит... Ну, или я снова туплю и не понимаю, как сделать красиво.
Применять другие SCADA не вариант, ибо импортозамещение...
если пользователь пишет о необходимости перебора объектов в цикле, то он либо переносит функции ПЛК на скаду, либо не понимает как решить ту же задачу через привязку переменных и события
...либо пытается сделать рутину проще. Например, метод подстановки для шаблонов по сути означает, что имя переменной надо ввести вручную, а не выбрать из списка переменных, что сильно повышает вероятность ошибки ввода, найти которую потом будет сложно... Поэтому хотелось бы избежать ручной работы везде, где можно.
Я стараюсь реализовывать варианты, когда шаблон сам настраивает свои поля и т.п. скриптом инициализации (чтобы место возникновения потенциальной ошибки было единственным), т.е. назначает переменные, получая "неизменную" часть имени переменной не из подстановки, а из "привязанного" к шаблону объекта. Проблема только в том, что нормального пути передать в шаблон объект не существует, поэтому приходится костылить через глобальные переменные... а глобальные переменные - зло.
Очередной вопрос по окнам, но с конкретикой. Задумал реализовать такое:
Есть объект, допустим, задвижка. С ней связаны 2 переменные, одна, допустим, VLV_1, другая VLV_1_MODE. Есть еще куча переменных, связанных с этим объектом, но их изменение надо делать в отдельном окне по клику на объекте. И таких объектов у меня много, все их переменные отличаются друг от друга индексами, т.е. VLV_2, VLV_3 и т.д.
Применять подход с шаблонами и шаблонными окнами в полном объеме [пока] не намереваюсь по вышеуказанной причине - ручной ввод подстановок чреват ошибками ввода.
Решил сделать так:
- Завёл глобальную переменную TMP_Var, в событии клика на объекте в неё заношу значение Variable из Sender, т.е. в случае с кликом на первой задвижке в неё попадает VLV_1.
- В событии открытия окна беру переменную TMP_Var, беру её имя "VLV_1" и, дополняя это имя суффиксами нужных мне переменных, получаю их имена типа "VLV_1_MODE", "VLV_1_CTRL" и так далее. Потом по этим именам извлекаю переменные и заношу их в объекты самого окна
- Таким образом, окно в момент открытия получает комплект всех переменных, связанных с объектом, на котором был клик.
В этом варианте ручного ввода переменных нет вообще, вероятность "механических" ошибок минимальна. Собственно, это метод подстановок, только динамический, а не статический, как с классическими шаблонами. Вопрос у меня такой: нет ли в этом подходе каких-то подводных камней, которые я не вижу? Например, связанных с множеством клиентов или там WEB или еще чем-нибудь?
P.S. У меня больше 20 лет стажа в Object Pascal, но всего 2,5 месяца в области ПЛК, и к принятым в этой области подходам я как-то еще не приспособился... так что прошу извинить, если вопросы кажутся тупыми.