Создавал не так давно тему по поводу передачи значения переменной в нужный TEdit.Text при ее (переменной) изменении.
Пришла мне в голову некоторая идея по этому поводу. А именно использовать не переменную, а экземпляр некоего класса.
В это класс я закину компоненты, которые должны следить за нужной мне переменной (экземпляром класса). То есть не сами компоненты будут следить, а класс, при вызове метода Value будет изменять нужные компоненты.
Код:
TMyClass = class
private
FValue:string
function GetStr(index: string): string;
procedure SetStr(index: string; const Value: string);
public
property Value:string read GetVal write SetVal;
//кстати, хотелось бы сделать это свойство дефолтным, но
// компилятор требует, чтобы оно было массивом, типа property Value[index:DataType].......
end;
function TStr.GetStr: string;
begin
result:=FValue;
end;
procedure TStr.SetStr(const Value: string);
begin
FValue := Value;
// Далее идет цикл, который перебирает выбранные мною компоненты и меняет нужное свойство на FValue
// Но есть проблема. У TEdit'a это свойство Text, у TLabel - Caption и тд
// А может, мне вообще потребуется менять свойство Hint или любое другое
end;
Вот теперь вопрос. Как мне оформить функцию для передачи компонента и record, хранящий информацию о компоненте так, чтобы вместе с самим компонентом программист так же передал нужное свойство для изменения?
Код:
TComp = record
Component:TComponent;
Value:{здесь должно быть что то, ссылающееся на нужное свойство компонента}
end;
TComps = array of TComp;
TMyClass = class
private
*****
FComps:TComps;
public
****
procedure AddComponent(C: TComponent;Prop: {должно передаться нужное свойство});
end;
***
procedure AddComponent(C: TComponent;Prop:???);
begin
SetLength(FComps,Length(fcomps)+1);
FComps[High(FComps)].Component := C;
FComps[High(FComps)].Value := Prop; {тут должна передаться ссылка (или что там) на нужное свойство компонента}
end;