0

我想使用 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;
4

1 回答 1

2

你试图做的事情是不可能的。您不能将在运行时确定的元类类型传递给as操作员。

对于您正在尝试做的事情,您将不得不通过TypInfo单元使用旧式 RTTI,在这种情况下是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 := '';
于 2019-02-15T22:51:34.017 回答