Добрый день!
Есть ряд вопросов.
Когда проект загрузился полностью инициализируем CheckBox согласно значениям основной и дополнительной переменных.
Основная отвечает за цвет самой галки
if CheckBox29.Variable.Value then
CheckBox29.Color := clLime
else
CheckBox29.Color := clAqua;
Вспомогательная за фон галки
if CheckBox29.VariableEx.Value then
CheckBox29.BackgroundColor := $008040
else
CheckBox29.BackgroundColor := $003030;
Далее то же самое в скрипты на изменение основной и вспомогательной переменных.
Захотел сделать в глобальном модуле обработку свойств CheckBox. И в одно секундном скрипте вызывать процедуру. Не надо плодить кучу
скриптов по изменению ну и т.д.
Но вот до реализации далеко.
1. Подскажите как в глобальном модуле в параметры процедуры указать константу цвета. На примере станет наверное понятнее
procedure CheckBoxColoration(NeededCB:TM_CheckBox; Color1:?????; Color2:?????);
begin
if NeededCB.VariableEx.Value then
NeededCB.BackgroundColor := Color1
else
NeededCB.BackgroundColor := Color2;
end
2. Касаемо Sender. Из справки ... Поэтому Sender имеет общий тип данных "TM_Control". ... Sender необходимо явно привести к нужному типу....
То есть with Sender as TM_CheckBox do
по идее дает возможность обратиться непосредственно к свойствам экземпляра TM_CheckBox
Но вот далее свойство Sender.BackgroundColor := $008040;
вызывает ошибку "... Undeclared identifier "BackgroundColor"...".
3. Можно ли вообще делать так:
if Sender is TM_CheckBox then
with Sender as TM_CheckBox do
if VariableEx.AsBool = True then
begin
Sender.BackgroundColor := $008040;
end
else
begin
Sender.BackgroundColor := $003030;
end;
Можете пояснить?
Жду ответов и вопросов
Здравствуйте.
Когда проект загрузился полностью инициализируем CheckBox согласно значениям основной и дополнительной переменных.
Далее то же самое в скрипты на изменение основной и вспомогательной переменных.
Если данные скрипты написаны по изменению переменной, то не нужно их дополнительно писать на событие "Запуск проекта". После запуска проекта в любом случае выполнятся скрипты по изменению переменных и цвета CheckBox изменятся в соответствии с условиями скрипта.
Захотел сделать в глобальном модуле обработку свойств CheckBox. И в одно секундном скрипте вызывать процедуру. Не надо плодить кучу
скриптов по изменению
Это плохая идея, следует избегать использования секундных скриптов, когда задачу можно решить без них. Если требуется изменять свойства CheckBox в зависимости от значений основной и доп. переменной, то для этого достаточно написать один универсальный скрипт, например:
begin
if Sender is TM_CheckBox then
with Sender as TM_CheckBox do
begin
{ изменение цвета по основной переменной }
if AsBool = True then
Color := clLime
else
Color := clAqua;
{ изменение цвета фона по доп. переменной }
if VariableEx.AsBool = True then
BackgroundColor := $008040
else
BackgroundColor := $003030;
end;
end.
, данный скрипт нужно назначить на события OnDataChange и OnDataChangeEx нужных объектов CheckBox. Теперь все объекты, у которых назначен данный скрипт будут изменять цвет по основной переменной, а цвет фона по доп. переменной.
Подскажите как в глобальном модуле в параметры процедуры указать константу цвета
Для этого нужно объявить переменную с типом LongWord:
procedure CheckBoxColoration(NeededCB:TM_CheckBox; Color1, Color2:LongWord);
, а при вызове передавать в переменные цветов нужный цвет, например:
CheckBoxColoration(CheckBox1, $008040, $003030);
вызывает ошибку "... Undeclared identifier "BackgroundColor"...".
Если Sender уже приведен к нужному типу строчкой "with Sender as TM_CheckBox do", то далее можно сразу обращаться к нужным свойствам объекта(см. пример скрипта выше). Если написать "Sender.BackgroundColor", то будет производиться работа с общим типом данных "TM_Control (https://simple-scada.com/help/script/tm_control.html)", в котором нет свойства BackgroundColor, поэтому и возникает ошибка. Чтобы скрипт скомпилировался корректно, нужно явно привести Sender к нужному типу "(Sender as TM_CheckBox).BackgroundColor := $003030;", но так как у Вас в скрипте Sender уже приведен к нужному типу, то можно сразу обращаться к нужным свойствам(см. пример скрипта выше).