Рассмотрим самый распространенный случай, когда требуется менять цвет объекта при изменении значения связанной с ним переменной. Для этого:
1.В свойстве "Переменная" объекта выбираем нужную переменную.
2.В инспекторе объектов переходим на вкладку "События" и дважды кликаем по кнопке "..." напротив события "OnDataChange" (изменилось значение переменной связанной с объектом).
Пишем код скрипта(см. примеры ниже). Если будет одно условие, то можно использовать конструкцию "if... then", если условий несколько, то рекомендуется использовать конструкцию "case...of". После написания скрипта его можно скомпилировать через меню "Скрипт -> Компилировать" или нажав клавишу "F9". После успешной компиляции скрипта можно сохранить проект, запустить клиент, подключиться к проекту и проверить результат.
Важно! Если необходимо, чтобы множество однотипных объектов меняли цвет по одинаковым условиям, то рекомендуется написать один универсальный скрипт(см. примеры ниже), тогда не нужно будет писать отдельный скрипт для каждого объекта, что значительно ускорит разработку проекта, а также повысит скорость его работы.
Примеры скриптов
1. Простой скрипт, если условие одно
begin
if Field1.AsInt = 1 then // если значение переменной поля равно 1, то
Field1.Color := clGreen // изменить цвет поля на зеленый
else // иначе
Field1.Color := clRed; // изменить цвет поля на красный
end.
|
2. Универсальный скрипт, если условие одно (можно применить к любому объекту)
begin
if Sender is TM_Object then // проверяем, что Sender это объект
with Sender as TM_Object do // приводим Sender к типу "TM_Object"
if AsInt = 1 then // если значение переменной объекта равно 1, то
Color := clGreen // изменить цвет объекта на зеленый
else // иначе
Color := clRed; // изменить цвет объекта на красный
end.
|
3. Простой скрипт, если условий несколько
begin
case Field1.AsInt of // если значение переменной поля равно:
1..3: Field1.Color := clRed; // от 1 до 3 - изменить цвет поля на красный
4 : Field1.BorderColor := clGreen; // 4 - изменить цвет рамки поля на зеленый
5 : Field1.FontColor := $FFFF00; // 5 - изменить цвет шрифта поля на желтый
6 : Field1.Color := RGB(0,0,255); // 6 - изменить цвет поля на синий
end;
end.
|
4. Универсальный скрипт, если условий несколько (можно применить к любому объекту)
begin
// Sender - это объект, который вызвал скрипт(например поле, изображение и т.д.)
if Sender is TM_Object then // проверяем, что Sender это объект
with Sender as TM_Object do // приводим Sender к типу "TM_Object"
case AsInt of // если значение переменной связанной с объектом равно:
1..5: Color := clRed; // от 1 до 5 - изменить цвет на красный
6, 7: Color := clGreen; // 6 или 7 - изменить цвет на зеленый
8 : Color := clYellow; // 8 - изменить цвет на желтый
end;
end.
|
5. Универсальный скрипт с доступом ко всем свойствам объекта
При помощи параметра "Sender" можно обращаться только к свойствам класса "TM_Control". Для обращения к остальным свойствам необходимо привести "Sender" к нужному типу. Например, если необходимо в универсальном скрипте изменить свойство "Цвет рамки поля", то необходимо привести "Sender" к типу "TM_Field":
begin
if Sender is TM_Field then // проверяем, что Sender это поле
with Sender as TM_Field do // приводим Sender к типу "TM_Field"
case AsInt of // если значение переменной связанной с полем равно:
1 : BorderColor := clGreen; // изменить цвет рамки на зеленый
2 : BorderColor := clRed; // изменить цвет рамки на красный
3 : BorderColor := clYellow; // изменить цвет рамки на желтый
4 : BorderColor := clGray; // изменить цвет рамки на серый
end;
end.
|
6. Универсальный скрипт для вещественной переменной (можно применить к любому объекту)
Допустим, имеется переменная давления, значение которой меняется в диапазоне от 5,6 до 12,6 и необходимо менять цвет объекта в зависимости от ее значения. Для того, чтобы расчеты работали корректно нужно перевести значение переменной в целое число - для этого ее нужно умножить на 10 и округлить до целого числа, а затем производить необходимые сравнения:
var
aPressure: Integer;
begin
if Sender is TM_Object then // проверяем, что Sender это объект
with Sender as TM_Object do // приводим Sender к типу "TM_Object"
begin
{ умножаем значение переменной на 10 и округляем до целого }
aPressure := Round(Value * 10);
{ далее работаем с переменной как с целым числом }
case aPressure of // если значение переменной связанной с объектом равно:
56..61 : Color := clRed; // от 5,6 до 6,1
62..70 : Color := clGreen; // от 6,2 до 7,0
71 : Color := clYellow;// 7,1
126 : Color := clBlue; // 12,6
end;
end;
end.
|
7. Сохранить значение цвета в переменную
Иногда требуется сохранить нужное значение цвета в переменную для последующего использования в скриптах. Для этого можно создать внутреннюю переменную с типом данных LongWord и записать в нее необходимый цвет, например:
begin
{ цвет можно указывать константами цветов (например "clRed"),
в формате HTML/HEX (например "$FFFF00"),
в формате RGB (например "RGB(0,0,255)") }
vrColor.Value := clCrimson;
end.
Затем можно использовать ее для изменения цвета в скриптах, например:
begin
Shape1.Color := vrColor.AsInt64;
end.
|
Универсальный скрипт можно применить к любому объекту, для этого требуется:
1.Выделить необходимый объект(или множество объектов) и через инспектор объектов перейти на вкладку "События".
2.В свойстве "OnDataChange" выбрать из списка наш созданный скрипт - он привяжется ко всем выделенным объектам.
3.Не забыть связать объект(объекты) с нужной переменной.
4.В дальнейшем, при необходимости можно копировать однотипные объекты и только менять у них переменную.
Теперь все объекты, у которых в событии "OnDataChange" выбран универсальный скрипт будут работать в соответствии с условиями скрипта.