Важно! Для создания однотипных объектов, страниц, окон, сообщений, следует использовать систему шаблонов. Примеры с использованием подмены переменных у объектов приведенные ниже, можно использовать только в случаях, когда задачу невозможно решить при помощи системы шаблонов. Также, следует учитывать, что подмена переменных происходит одновременно на всех клиентах, поэтому в проектах с несколькими клиентами использовать подмену переменных не рекомендуется.
В некоторых случаях может понадобиться изменить переменную объекта прямо во время работы проекта. Для этого нужно использовать свойство "Variable", например:
begin
Field1.Variable := MyVariable; // связываем поле "Field1" с переменной "MyVariable"
end.
Важно! Если после подмены переменной требуется выполнить скрипты OnDataChange/OnDataChangeEx для объектов связанных с этой переменной, то нужно использовать метод OnDataChangeEvent.
Рассмотрим более сложную задачу: допустим, необходимо, чтобы при клике на исполнительный механизм открывалось однотипное окно регулятора и у объектов окна переменные подменялись на соответствующие переменные исполнительного механизма. Для этого можно использовать функцию "GetVariableByName", которая возвращает переменную по имени:
var
aVar: TM_Variable;
begin
{ ищем переменную с именем "MyVariable" и
результат поиска записываем в "aVar" }
aVar := GetVariableByName('MyVariable');
if Assigned(aVar) then // если переменная с таким именем найдена
Field1.Variable := aVar; // связываем поле "Field1" с найденной переменной
end.
Для нашей задачи при создании переменных необходимо именовать их в одном стиле, например:
•переменные для механизма 1: Var1_SP, Var1_PV, Var1_MAN;
•переменные для механизма 2: Var2_SP, Var2_PV, Var2_MAN;
У изображений исполнительных механизмов можно использовать свойство "Тег", как номер механизма (или группы переменных). У одного механизма ставим "Тег" = 1, у другого "Тег" = 2. Затем, пишем универсальный скрипт по клику на исполнительный механизм ("OnClick"):
var
aVar: TM_Variable;
aName: string;
begin
{ получаем приставку к имени переменной в зависимости от свойства "Тег" объекта (например "Var1") }
aName := 'Var' + IntToStr(Sender.Tag);
aVar := GetVariableByName(aName + '_SP'); // получаем SP переменную
FieldSP.Variable := aVar; // связываем поле "FieldSP" с переменной "VarX_SP"
aVar := GetVariableByName(aName + '_PV'); // получаем PV переменную
FieldPV.Variable := aVar; // связываем поле "FieldPV" с переменной "VarX_PV"
aVar := GetVariableByName(aName + '_MAN'); // получаем MAN переменную
FieldMAN.Variable := aVar; // связываем поле "FieldMAN" с переменной "VarX_MAN"
end.
Теперь можно создать множество исполнительных механизмов и у каждого выставить свойство "Тег" (соответствующее группе переменных). Также, у каждого механизма нужно выставить универсальный скрипт описанный выше на событие "OnClick". В результате, при клике по механизму будет появляться окно, в котором у объектов будут переменные этого механизма. При этом не приходится писать отдельные скрипты и создавать отдельные окна для каждого механизма.