Добрый день!
Задача: отображать значение переменной Х типа single в форматах:
1)"0" если Х > 1, т.е. отображать "53", например, когда переменная равно 53.282
2) "0.00E+00" если Х < 1, т.е. отображать "2.82E-2" когда переменная равно 0.0282
Моё решение (Работает):
1) Исходной переменной Х при объявлении задать формат "0". Создать внутреннюю переменную Х_2 задать ей формат "0.00E+00"
2) Создать 2 поля TM_Field, одному присвоить Х, другому Х_2 (и Х в качестве доп.переменной). Наложить одно поле на другое.
3) Создать скрипты(приведены ниже):
а) Скрывать объект, если переменная ушла из своего диапазона, иначе отображать (OnDataChange)
б) Сопоставлять значение Х и Х_2 при изменении Х (OnDataChangeEx)
Вопросы:
1) Правильно ли я понимаю, что такой подход сейчас единственно возможный? Свойство Format ведь доступно только для чтения? (См скрин 1)
2) Не планируется ли открыть данное свойство на запись?
Дополнительно:
3) Не планируется ли сделать для пользователей возможность конструировать свои объекты типа фигура, т.к. эллипса и прямоугольника не хватает? Ну или дать возможность из набора эллипсов и прямоугольников собирать один объект с едиными свойствами.
4) Можно ли указать в руководстве какие свойства доступны на запись, а какие только на чтение? Было бы полезно. Или укажите если я не заметил это.
Заранее благодарен.
Приложение (листинг скриптов)
1) Сокрытие
begin
if Sender is TM_Field then // проверяем, что Sender это поле
with Sender as TM_Field do // приводим Sender к типу "TM_Field"
begin
if Value < 5 THEN
Visible := FALSE // скрываем поле
ELSE
Visible := TRUE;
end;
end.
2) сопоставление внешней и внутренней переменной
begin
if Sender is TM_Field then // проверяем, что Sender это поле
with Sender as TM_Field do // приводим Sender к типу "TM_Field"
TM_Field(Sender).Variable.Value := TM_Field(Sender).VariableEx.Value; // передача значения из внешнего тега во внутренний
end.
Здравствуйте.
Для решения описанной задачи можно использовать компонент "Текст (https://simple-scada.com/help/manual/text.html)" (при необходимости можно настроить внешний вид аналогичный компоненту "Поле"), который нужно связать с исходной переменной и на событие "OnDataChange" написать универсальный скрипт:
begin
if Sender is TM_Text then
with Sender as TM_Text do
begin
if AsFloat > 1 then
Text := FormatFloat('0', AsFloat)
else
Text := FormatFloat('0.00E+00', AsFloat);
end;
end.
Свойство Format ведь доступно только для чтения?
Формат можно поменять у переменной (например, Variable.Format := '0'; ), но это повлияет на отображение и ввод переменной во всех объектах связанных с ней. В примере выше, переменная будет отображаться с заданным форматом в объекте "Текст" и при этом будет доступна для изменения из других компонентов в формате, заданном при создании переменной.
Не планируется ли сделать для пользователей возможность конструировать свои объекты типа фигура, т.к. эллипса и прямоугольника не хватает? Ну или дать возможность из набора эллипсов и прямоугольников собирать один объект с едиными свойствами.
Добавление таких возможностей не планируется. В последнем обновлении (https://simple-scada.com/help/manual/whats-new.html) были добавлены новые типы фигур: треугольник и ромб. Также, можно добавить в проект свое Изображение (https://simple-scada.com/help/manual/picture.html) с нужной фигурой и использовать его.
Можно ли указать в руководстве какие свойства доступны на запись, а какие только на чтение? Было бы полезно. Или укажите если я не заметил это.
У свойств, которые доступны только для чтения, имеется соответствующая пометка в описании. Например, см. свойство "StatesCount (https://simple-scada.com/help/script/btnstatescount.html)".