Возможно ли реализовать следующее: если в настройках элемента "Ввод данных" указан парольный доступ, то при несанкционированном доступе открывалось окно с сообщение об ошибке?
Вид для печати
Возможно ли реализовать следующее: если в настройках элемента "Ввод данных" указан парольный доступ, то при несанкционированном доступе открывалось окно с сообщение об ошибке?
Если исполнить танец с бубном, то можно.
У Вас уже создано окно с сообщением?
Задан пароль для "Уровень 1"?
Элемент "Ввод данных" можно не ставить под пароль.
1. Нужно создать ФО (режим "непрерывно"), в котором:
- скопировать бит PSB60 в любой пользовательский (например, PSB300)
- далее инвертировать PSB300, т.е. PSB300 = 1 пока доступ на "Уровень 1" закрыт
2. Далее создаем кнопку вызова окна:
Вложение 82261Вложение 82262
при этом кнопку делаем скрытой и устанавливаем бит видимости PSB300,
а кнопку размещаем над полем ввода так, чтобы она его полностью накрывала по размерам
если кнопка окажется под полем, то с помощь контекстного меню выбрать для поля - "на слой ниже"
Т.е. когда доступ закрыт - бит активен - при нажатие на поле будет вызвано заданное окно с ошибкой.
Если доступ открыт - бит пасивен - кнопка не работает - происходит вызов окна ввода значений.
Спасибо, попробую.
Чуть чуть не так, в одном бите нельзя инвертировать, надо в соседнем.
В примере разблокировка битов 400 инверсия 401, паролем 3 уровня 333
Спасибо. А что такое "оболочка макроса" и откуда оно взялось?
Я еще для панелей СП270 озадачился созданием более вменяемого поведения элементов защищенных паролем.
Ведь если доступ закрыт, т.е. пароль не введен или открыт уровень доступа ниже требуемого, например, для элемента Ввод данных, то при нажатии на на защищенный элемент ничего кроме писка не происходит.
Тогда я создал в своей библиотеке ГМ ВСЕ существующие стандартные элементы у которых сделал вменяемое поведение
Вложение 82264
Эти элементы внешне не отличаются от стандартных. Можно менять у них оформление, размеры, надписи.
Но они имеют следующие особенности
- если доступ закрыт, то при нажатии на такой элемент появляется стандартное окно - Нет доступа
- если доступ открыт, но уровень доступа ниже заданного, то появится стандартное окно Неверный пароль
https://www.youtube.com/watch?v=uRZieu50LNM
https://www.youtube.com/watch?v=Dhp-XdwEduE
https://www.youtube.com/watch?v=Yk3qqsb0mzY
идею понял, только не получается сделать для нескольких уровней
https://drive.google.com/file/d/1v8F...usp=drive_link
PS: очень не хочется использовать макросы, потому что они не работают в эмуляции
У меня конфигуратор v2.D3k-5. В меню никаких "графических макросов" не нашел. Ничего стороннего не устанавливал, но ваш проект работает. Как так?
Спасибо. А что такое графические макросы? В руководстве не нашел, в конфигураторе тоже.
Аналогичные элементы есть и в моей библиотеке для СП300
Вложение 82266
Но теперь поведение у этих элементов круче!!!
Если доступ закрыт вобще
Вложение 82267 Вложение 82268 Вложение 82270
Появляется стандартное окно - Доступ закрыт, но на этом окне красным квадратиком обозначен нужный уровень доступа для данного элемента
Если доступ открыт, но уровень доступа не достаточен - появится стандартное окно Недостаточно прав с отображением зелеными квадратиками доступные уровни и красным квадратиком требуемый уровень для данного элемента
Анимация:
Тестовый проект для СП307 и СП310 прилагается
Очень круто. Только пользоваться "страшно", потому что не понимаю как енто всё работает.
Когда берете с панели инструментов, например, Ввод данных не страшно? Ведь небось тоже не понимаете как ентот элемент(стандартный) работает
Библиотека ГМ сделана для того, чтобы просто взять любой элемент и поместить на экран как любой стандартный с панели инструментов.
По сути стандартный элемент Ввод данных такой же ГМ как и любой из моей библиотеки
Ссылка на библиотеку в моей подписи. Качайте архив с библиотекой. Там же есть инструкция, как установить и как пользоваться
Термин "графический макрос" Вы придумали, или это какой-то устоявшийся термин?
я придумал
Они в эмуляции работают в отличии от макросов на си
откуда Вы взяли информацию, как изменить поведение стандартных компонентов?
Мои изыскания по теме "Овен СП300" ограничились UserMode, чтобы системные окна под стиль проекта переделать. А оказывается с можно менять поведение стандартных компонентов.
лично по мне
это всё абсолютно ненужное украшательство
штатного средства установки пароля и блокировки ввода - достаточно в 99,9 случаев
потому что изначально у панели не должен оказаться человек, не знающий нужного пароля.
а если всё-таки оказался, то абсолютно наплевать увидит он это окно про ошибку или нет - главное - ввода данных не будет
о своих трудозатратах тоже надо помнить, к сожалению Конфигуратор не слишком продуман в плане удобства и минимизации времени разработки проекта
Согласен полностью. Я тоже ничего против творчества не имею. Но иногда мы так увлекаемся этим творчеством, что напрочь забываем о смысле того, что мы делаем. Я тоже для своих устройств создавал WEB-интерфейсы для создания крутых страниц с различными настройками (HTML учил наизусть). А потом понял, что это нафиг никому не нужно. Глубокая настройка делается при пуско-наладке, потом 2-3 параметра на подстройку в работе и всё. Вся красота и защита от дурака - мертвый груз!!!
как я понял, ответ на мой вопрос - реализовать это стандартными средствами без использования макросов нельзя
Можно без макросов. Танец с бубном. Забыли?
Когда "Бит видимости" активен, но кнопка "скрыта" и находиться над "Полем ввода",
то как ни нажимай будет срабатывать только кнопка.
А как быть, если используется несколько уровней?
https://drive.google.com/file/d/1v8F...usp=drive_link
А именно?!
Разрешить доступ в поле ввода только при открытии всех уровней (или определенных).
Как это сделать без макросов?
Опять же танец с бубном.
ФО:
Если не будет хватать хоть одного уровня, то разница будет > 0.Код:Копировать PSB60 -> PSW256.0
Копировать PSB61 -> PSW256.1
Копировать PSB62 -> PSW256.2
Копировать PSB63 -> PSW256.3
Копировать PSB64 -> PSW256.4
Копировать PSB65 -> PSW256.5
Копировать PSB66 -> PSW256.6
Копировать PSB67 -> PSW256.7
Копировать PSB68 -> PSW256.8
Инвертировать PSW256.0
Инвертировать PSW256.1
Инвертировать PSW256.2
Инвертировать PSW256.3
Инвертировать PSW256.4
Инвертировать PSW256.5
Инвертировать PSW256.6
Инвертировать PSW256.7
Инвертировать PSW256.8
Мат.операция PSW256 = 511 - PSW256 (511 dec = 111111111 bin - маска затребованных уровней доступа, если все включены, то результат будет 0)
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Фишка в том что, при делении на 2 (8 раз) любое число > 0 вырождается в 1, т.е. 1/2 = 1
Соответственно PSW256.0 становится "Битом видимости", т.е. признаком того, что не все требуемые уровни открыты.
спасибо, попробую
Результат будет не однозначнымЦитата:
Мат.операция PSW256 = 511 - PSW256 (511 dec = 111111111 bin - маска затребованных уровней доступа, если все включены, то результат будет 0)
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
так как
последнее утверждение весьма опрометчиво. Наверно Вы это проверяли в эмуляции. Если загрузите свой код в панель, то окажется, что 1/2 = 0Цитата:
Фишка в том что, при делении на 2 (8 раз) любое число > 0 вырождается в 1, т.е. 1/2 = 1
Т.е. я утверждаю, что в эмуляции целочисленное деление выполняется не правильно - остаток от деления не отбрасывается, вместо этого происходит округление результата и 1/2 получается равны 1.
А вот в живой панели тоже самое целочисленное деление выполняется правильно - остаток от деления отбрасывается и 1/2 получается равным 0.
А вот такая ФО прокатит?
Код:Копировать PSB60 -> PSW256.0
Копировать PSB61 -> PSW256.1
Копировать PSB62 -> PSW256.2
Копировать PSB63 -> PSW256.3
Копировать PSB64 -> PSW256.4
Копировать PSB65 -> PSW256.5
Копировать PSB66 -> PSW256.6
Копировать PSB67 -> PSW256.7
Копировать PSB68 -> PSW256.8
Инвертировать PSW256.0
Инвертировать PSW256.1
Инвертировать PSW256.2
Инвертировать PSW256.3
Инвертировать PSW256.4
Инвертировать PSW256.5
Инвертировать PSW256.6
Инвертировать PSW256.7
Инвертировать PSW256.8
Мат.операция PSW256 = PSW256 + 0 включить макс значение = 1 (Если PSW256 > 0, то результат не превысит 1)
Попробовал. И не понял сути всего этого. `PSW256` равен единице, если пройдена авторизация. Как это использовать?
Допустим, в проекте заданы 9 уровней пароля. Есть контролы доступные для первого уровня, есть контролы доступные для второго уровня, и т.д. до девятого уровня.
Наверно, надо сделать так, что бы
при авторизации первого уровня `PSW256` был `111111110 bin`
при авторизации второго уровня `PSW256` был `111111100 bin`
...
при авторизации восьмого уровня `PSW256` был `100000000 bin`
при авторизации девятого уровня `PSW256` был `000000000 bin`
и тогда `PSW256` можно будет использовать для битов видимости в кнопках вызова окна с ошибкой
Теперь мой способ с использованием ТОЛЬКО СТАНДАРТНЫХ средств конфигуратора
НИКАКИХ ГМ!!!
И так имеем
Вложение 82281
1. Три Ввода данных с паролями 1, 2 и 3 уровней
PSW300
PSW301
PSW302
2. Вашу Ф.область с копированием/ инвертированием бит оставляю как есть
Вложение 82282
3. Создаем три дисплея для PSW300, 301, 302 с оформлением и размерами таким же как и у цифровых вводов
Скрытый текст:
4. сохраняем их в библиотеке материалов и удаляем дисплеи с экрана, больше они не нужны
Скрытый текст:
5. Берем 3 кнопки открытия окна (окно с аварией уже есть - 61001)
Делаем размеры кнопок равными размерам цифровых вводов. Помещаем кнопки поверх цифровых вводов
В качестве битов видимости для них - PSB300, 301, 302
Скрытый текст:
6.А как же дисплеи сохраненные в библиотеке?
Мы их используем в оформлении внешнего вида кнопок !!!
Скрытый текст:
Теперь внешний вид кнопки совпадает с видом цифрового ввода и даже на кнопке отображаются значения регистров!!!
Скрытый текст:
Хорошо. Давайте по порядку. Только медленно.
На экране выставлено "Поле ввода". Сверху на него наложена кнопка "Вызов окна N", которая закрывает собой это поле.
Даже когда кнопка скрыта (стоит галочка скрыть) и видно только само "Поле ввода", при нажатии на него будет вызвано окно N (вместо окна ввода значения).
Но если поставить галочку "Бит видимости" и указать сам бит, то при его пассивном состоянии кнопка "Вызов окна N" не просто скрыта, а отсутствует совсем,
т.е. "Поле ввода" она уже не защищает.
Соответственно, чтобы защитить "Поле ввода", надо что был активен выбранный "Бит видимости".
Осталось определиться при каких условиях он должен быть активен? Или наоборот?
У нас 9 уровней доступа. У каждого свой пароль. Можно открывать/закрывать каждый уровень независимо.
У каждого уровня есть свой бит, который активен когда доступ на этот уровень открыт.
Теперь укажите свои условия, при которых доступ к "Полю ввода" должен быть закрыт вызовом окна N.
Если авторизация = уровень1, то доступно (уровень1)
Если авторизация = уровень2, то доступно (уровень1, уровень2)
Если авторизация = уровень3, то доступно (уровень1, уровень2, уровень3)
...
Если авторизация = уровень9, то доступно все
Доступ к "Полю ввода" должен быть закрыт вызовом окна N, если уровень авторизации меньше заданного
Допустим задан "Уровень 5", т.е. любой открытый из уровней 5, 6, 7, 8 ,9 должен сделать "Бит видимости" пассивным.
Если в ФО вписать:
Активный бит PSW256.0 будет защищать "Поле вода" кнопкой "Вызов окна N".Код:Копировать бит PSB64 -> PSW256.0
Копировать бит PSB65 -> PSW256.1 // Любой активный бит сделает PSW256 > 0. Верно?
Копировать бит PSB66 -> PSW256.2 // Если все пассивные PSW256 = 0. Верно?
Копировать бит PSB67 -> PSW256.3
Копировать бит PSB68 -> PSW256.4
Матем. операция PSW256 = PSW256 + 0 с галочкой в макс.значение = 1 // PSW256 > 0 превратится в PSW256.0 = 1, а PSW256 = 0 оставит без изменений. Верно?
Инвертировать бит PSW256.0 // Сделать бит PSW256.0 активным, если не открыт ни один из указанных уровней (5, 6, 7, 8, 9)
Если задан "Уровень 5", то элементы с уровнен доступа больше 5 (6, 7, 8, 9) должны быть недоступны , т.е. бит видимости кнопки открытия окна с ошибкой должен быть 1.
Парольный доступ запрещает доступ к элементу, если уровень авторизации меньше указанного в свойстве "Пароль" - "Уровень". Или я не прав?
Абсолютно правы!!! Но в нашем случае защищать парольным доступом "Поле ввода" и не надо.
Нам надо чтобы "Бит видимости" кнопки был активен, если текущий открытый уровень меньше заданного,
т.е. текущий открытый уровень должен быть больше либо равен заданному, чтобы снять защиту (сделать "Бит видимости" кнопки пассивным).
Если авторизация = уровень1, то доступно (уровень1)
Если авторизация = уровень2, то доступно (уровень1, уровень2)
Если авторизация = уровень3, то доступно (уровень1, уровень2, уровень3)
...
Если авторизация = уровень9, то доступно все
Доступ к "Полю ввода" должен быть закрыт вызовом окна N, если уровень авторизации меньше заданного.
Т.е. для элементов, у которых уровень пароля задан `>` уровня авторизации, бит видимости открытия окна с ошибкой равен 1 (активен),
а для элементов, у которых уровень пароля задан `<=` уровня авторизации, бит видимости открытия окна с ошибкой равен 0 (пассивен)
PS: уровень пароля для элемента задается не свойствах элемента, а свойствах кнопки открытия окна с ошибкой, но можно и продублировать
Хочу заметить, что в эмуляции если открыт уровень доступа, например 3, то эмулятор только PSB62 устанавливает в 1, PSB60 и PSB61 остаются в 0.
В реальной панели все работает иначе, т.е. для 3 уровня PSB60, 61 и 62 устанавливаются в 1.