А покажите тот скрипт?
Так бывает если у вас перед тем была строчка with Sender as TM_Object
тогда вместо названия Поле. надо писать сразу свойство того поля, что запустило скрипт.
По вашему случаю, я бы пользовался тегами объектов.
Это не сильно правильно, но работает.
делаете по полю для каждого параметра, тег для каждого поля соответствует № агрегата. На их изменение делаете некий скрипт.
В скрипте определяете процедуру, которой передаете все переменные данного агрегата в зависимости от тега. Я скину то шото похожее, надеюсь разберетесь :)
procedure DiffTemp(VarIn1, VarIn2, VarOut :TM_Variable);
begin
if VarIn1.IsGoodQuality = true and VarIn2.IsGoodQuality = true then begin
VarOut.Value := VarIn2.Value - VarIn1.Value;
end;
end;
begin
case Sender.Tag of
1: begin
DiffTemp(Temp11,Temp12,DT_1);
end;
2: begin
DiffTemp(Temp21,Temp22,DT_2);
end;
3: ...
...
end;
end.
В вашем случае процерура будет посложнее, но в общем как-то так.
Вопрос по редактору конечно, но задам его тут...
var
fld: TM_Field;
begin
if Sender is TM_Field then
begin
fld:=Sender as TM_Field;
if not fld.Variable.IsGoodQuality then
ImageCSGO.FlashColor:=clRed
else
ImageCSGO.FlashColor:=clNone
end;
end.
вот такой у меня скрипт, который компилируется нормально и работает , НО внутри второго begin не работает автодополнение...в чем у меня ошибка?
В автодополнении у Sender не выходит Variable также в автодополнении не выходят типы почему-то TM_Field, TM_Text и т.д.
Это верно, т.к. Sender имеет тип TM_Control, у него только базовые свойства. Если нужно получить доступ к другим свойствам, то нужно явно приводить Sender к нужному типу, как у Вас это сделано.
а можно без локальной переменной типа TM_Field обойтись или обязательно надо?
Без неё можно, но тогда придется либо писать так:
begin
if Sender is TM_Field then
if not TM_Field(Sender).Variable.IsGoodQuality then
ImageCSGO.FlashColor := clRed
else
ImageCSGO.FlashColor := clNone;
end.
Либо через with..do:
begin
if Sender is TM_Field then
with Sender as TM_Field do
if not Variable.IsGoodQuality then
ImageCSGO.FlashColor := clRed
else
ImageCSGO.FlashColor := clNone;
end.