Метод текста не работает с Findclass (...), но с простым "TEdit" - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу использовать findclass и findcomponent, чтобы иметь возможность передавать компонент-отправитель в качестве параметра в процедуре.

Спасибо за чтение.

Редактировать: я использую Delphi 2005


[Ошибка]: E2003 Необъявленный идентификатор: 'текст'

TestMemo.Text := (FindComponent(VonKomponente.name) as
  (Findclass(vonkomponente.ClassType.ClassName))).text; -> does not work

TestMemo.Text := (FindComponent(VonKomponente.name) as TEdit).text; -> works

procedure TFormTest.Edit7DblClick(Sender: TObject);
begin
  MemoEdit((Sender as TComponent),'table','row');
end;


procedure TFormTest.MemoEdit(VonKomponente :TComponent;table,row : String);
begin
  FormTestMemo.Max_Textlaenge := get_length(table,row);
  FormTestMemo.Text := (FindComponent(VonKomponente.name) as
    (Findclass(vonkomponente.ClassType.ClassName))).text;
  If FormTestMemo.Showmodal = MrOk then
  begin
    ...
  end;
end;

1 Ответ

0 голосов
/ 16 февраля 2019

То, что вы пытаетесь сделать, невозможно.Вы не можете передать тип метакласса, определенный во время выполнения, оператору as.

Для того, что вы пытаетесь сделать, вам придется прибегнуть к использованию RTTI старого стиля через TypInfo, в данном случае это функция TypInfo.GetStrProp(), например:

uses
  ..., TypInfo;

FormTestMemo.Text := GetStrProp(VonKomponente, 'Text');

Обратите внимание, что не все текстовые компоненты имеют свойство Text, некоторые имеют Caption свойство, например:

uses
  ..., TypInfo;

var
  prop: PPropInfo;

prop := GetPropInfo(VonKomponente, 'Text');
if prop = nil then
  prop := GetPropInfo(VonKomponente, 'Caption');

if prop <> nil then
  FormTestMemo.Text := GetStrProp(VonKomponente, prop)
else
  FormTestMemo.Text := '';
...