Здравствуйте.
хотелось бы, что при определённом значении, к примеру 0, менялся цвет фона текста. Это возможно?
Чтобы изменить цвет фона у компонента "Текст (https://simple-scada.com/help/manual/text.html)" нужно использовать свойство "Color (https://simple-scada.com/help/script/color.html)". Но у компонента "Текст" свойство "Прозрачность фона" по умолчанию установлено в 0 (полностью прозрачный), измените данное свойство, например на 255, тогда смена цвета будет видна. Также прозрачность можно менять в скрипте, для этого нужно использовать свойство "Alpha (https://simple-scada.com/help/script/alpha.html)". Если нужно менять цвет текста, то используйте свойство "FontColor (https://simple-scada.com/help/script/fontcolor.html)". Например:
begin
if Sender is TM_Object then // проверяем, что Sender это объект
with Sender as TM_Object do // приводим Sender к типу "TM_Object"
if AsInt = 1 then // если значение переменной объекта равно 1, то
begin
Color := clRed; // изменить цвет объекта на красный
FontColor := clGreen; // изменить цвет шрифта
Alpha := 255; // изменить прозрачность
end
else // иначе
begin
Color := clGray; // изменить цвет объекта на серый
FontColor := clBlack; // изменить цвет шрифта
Alpha := 0; // изменить прозрачность
end;
end.
Сделал второй скрипт и доп переменную, работает. Или можно этот скрипт вставить в прошлый скрипт выбора текста? Переменная основная и доп ведь одна и та же. Сходу не вышло, ругается на отсутствие End, но куда вставить не разобрался.
Ну т.е. вставить в этот
begin
if Sender is TM_Text then // проверяем, что Sender это текст
with Sender as TM_Text do // приводим Sender к типу "TM_Text"
case AsInt of
0 : Text := 'Местн.Пуск';
1 : Text := 'Вынос.Пульт';
2 : Text := 'Автозапуск';
3 : Text := 'Диспетчер';
4 : Text := 'Работает';
end;
end.
Сделал второй скрипт и доп переменную, работает. Переменная основная и доп ведь одна и та же.
Не нужно указывать одну и туже переменную в качестве основной и дополнительной и писать два разных скрипта. В этом нет никакого смысла. Все необходимые условия можно описать в одном скрипте - см. пример ниже.
Или можно этот скрипт вставить в прошлый скрипт выбора текста?
Просто взять и вставить один скрипт в другой нельзя. Мы привели пример скрипта, как использовать описанные выше свойства объекта. Рекомендуем ознакомиться с руководством по скриптам (https://simple-scada.com/help/script/index.html), а также с разделами "Рекомендации по работе со скриптами (https://simple-scada.com/help/script/script-recomend.html)" и "Отладка скриптов (https://simple-scada.com/help/script/debugscripts.html)". Примеры наиболее часто используемых скриптов можно посмотреть по ссылке (https://simple-scada.com/help/script/sample-scripts.html).
Пример скрипта:
begin
if Sender is TM_Text then // проверяем, что Sender это текст
with Sender as TM_Text do // приводим Sender к типу "TM_Text"
case AsInt of
0:
begin
Text := 'Местн.Пуск';
FontColor := clYellow; // изменить цвет шрифта
Color := clRed; // изменить цвет фона
Alpha := 255; // изменить прозрачность
end;
1:
begin
Text := 'Вынос.Пульт';
FontColor := clBlack; // изменить цвет шрифта
Color := clNone; // изменить цвет фона
Alpha := 0; // изменить прозрачность
end;
2:
begin
Text := 'Автозапуск';
FontColor := clBlack; // изменить цвет шрифта
Color := clNone; // изменить цвет фона
Alpha := 0; // изменить прозрачность
end;
3:
begin
Text := 'Диспетчер';
FontColor := clBlack; // изменить цвет шрифта
Color := clNone; // изменить цвет фона
Alpha := 0; // изменить прозрачность
end;
4:
begin
Text := 'Работает';
FontColor := clBlack; // изменить цвет шрифта
Color := clNone; // изменить цвет фона
Alpha := 0; // изменить прозрачность
end;
end;
end.
Здравствуйте.
Наборы данных, выбираемые по непрерывному значению индекса, можно перенести из программного кода в область данных.type Properties = record
Text: string[32];
FontColor : cardinal;
Color: cardinal;
end;
const StatusList: array[0..4] of Properties = (
('Местн.Пуск', clGray, clBlack),
('Вынос.Пульт', clRed, clGreen),
('Автозапуск', clGray, clBlack),
('Диспетчер', clGray, clBlack),
('Работает', clGray, clBlack));
begin
if Sender is TM_Text then // проверяем, что Sender это текст
with Sender as TM_Text do // приводим Sender к типу "TM_Text"
if (0 <= AsInt) and (AsInt <= high(StatusList)) then begin // проверка индекса на допустимость
Text := StatusList[AsInt].Text;
FontColor := StatusList[AsInt].FontColor; // изменить цвет шрифта
Color := StatusList[AsInt].Color; // изменить цвет фона
end;
end.
Латание существующих скриптов (в порядке убывания сложности редактирования и возрастания нежелательности применения :o):
1 способ: редактирование скрипта. Сначала следует оператор изменения свойства Text (фактически скрипт с оператором case), далее операторы изменения свойств Color и FontColor.
// Редактируем большой скрипт. Добавленные операторы изображены заглавными буквами.
begin
if Sender is TM_Text then // проверяем, что Sender это текст
with Sender as TM_Text do // приводим Sender к типу "TM_Text"
BEGIN
case AsInt of
0 : Text := 'Местн.Пуск';
1 : Text := 'Вынос.Пульт';
2 : Text := 'Автозапуск';
3 : Text := 'Диспетчер';
4 : Text := 'Работает';
ELSE EXIT; // запрет изменения цветов при выходе основной переменной из допустимых пределов
end;
// вставить фрагмент из маленького скрипта
if AsInt = 1 then // если значение переменной объекта равно 1, то
begin
Color := clRed; // изменить цвет объекта на красный
FontColor := clGreen; // изменить цвет шрифта
// Alpha := 255; // изменить прозрачность
end
else // иначе
begin
Color := clGray; // изменить цвет объекта на серый
FontColor := clBlack; // изменить цвет шрифта
// Alpha := 0; // изменить прозрачность до 0 = оператор Color := clGray не имеет особого смысла
end;
// конец фрагмента маленького скрипта
END;
end.
2 способ: разнесение скриптов по основной и доп. переменным. Скрипт изменения цветов должен работать с доп. переменной.begin
if Sender is TM_Object then // проверяем, что Sender это объект
with Sender as TM_Object do // приводим Sender к типу "TM_Object"
if VariableEx.AsInt = 1 then // если значение переменной объекта равно 1, то
begin
Color := clRed; // изменить цвет объекта на красный
FontColor := clGreen; // изменить цвет шрифта
// Alpha := 255; // изменить прозрачность
end
else // иначе
begin
Color := clGray; // изменить цвет объекта на серый
FontColor := clBlack; // изменить цвет шрифта
// Alpha := 0; // изменить прозрачность
end;
end.
Однако скрипт не контролирует выход доп. переменной за допустимые пределы, т.е. изменение цветов происходит всегда.
3 способ: вызов скрипта из скрипта. Только для объектов с запрещенным доступом и только для примера.
Примеры редактирования скриптов во вложении.
Ну т.е. два верхних скрипта не возможно последовательно прописать?
Вот так выглядят два скрипта описанные в одном:
var
aText: TM_Text;
begin
if not (Sender is TM_Text) then Exit;
aText := Sender as TM_Text;
// смена текста в зависимости от значения переменной
case aText.AsInt of
0 : aText.Text := 'Местн.Пуск';
1 : aText.Text := 'Вынос.Пульт';
2 : aText.Text := 'Автозапуск';
3 : aText.Text := 'Диспетчер';
4 : aText.Text := 'Работает';
end;
// смена цвета
if aText.AsInt = 1 then
begin
aText.Color := clRed; // изменить цвет объекта на красный
aText.FontColor := clGreen; // изменить цвет шрифта
aText.Alpha := 255; // изменить прозрачность
end else
begin
aText.Color := clGray; // изменить цвет объекта на серый
aText.FontColor := clBlack; // изменить цвет шрифта
aText.Alpha := 0; // изменить прозрачность
end;
end.
Получается универсальный скрипт для любых компонентов Текст в проекте.
Так то с доп переменной работает хоть и не корректное программирование...
Скрипты описанные выше не обращаются к свойству "Доп. переменная", поэтому доп. переменная для данных скриптов не нужна и её можно убрать.