Показать сообщение отдельно
  #1  
Старый 14.03.2013, 08:36
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Передать метод

Создавал не так давно тему по поводу передачи значения переменной в нужный 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;
Ответить с цитированием