![]() |
|
|
#1
|
||||
|
||||
|
Создавал не так давно тему по поводу передачи значения переменной в нужный 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; |