簡體   English   中英

文本方法不適用於Findclass(...),但適用於普通的“ TEdit”

[英]Text Method doesn't work with Findclass(…) but with plain “TEdit”

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

您試圖做的事是不可能的。 您不能將在運行時確定的元類類型傳遞給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 := '';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM