|
#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; |