4

プログラムでいくつかの単純なクラスを宣言しました。

MyClass = class 
    Var1 : Integer
    Var2 : Integer
end;

私がやりたいことは、実行時にこのクラス (「MyClass」) の変数のリストを取得することです (おそらく、コンポーネントの「GetPropList」のようなものでしょうか?)

私は次のようなことを念頭に置いています(明らかに、関数「GetVarNames」は存在しませんが、これでアイデアが得られることを願っています)。これにより、「MyClass」にリストされている変数の名前が TStringList の文字列に取り込まれます。

var
    MyVariableNamesList: TStringList
    i : integer;

begin
    MyVariableNamesList := TStringList.create;        
    MyVariableNamesList := GetVarNames(MyClass)

end;

誰でもアドバイスできますか?これがばかげた質問である場合は、事前に謝罪してください!

4

1 に答える 1

5

Delphi のバージョンによっては、新しい RTTI (Delphi 2010 で導入) を使用できます。

次のようなことができます。

function GetVarNames(const AClass : TObject) : TStringList;
var lType : TRttiType;
  lContext : TRttiContext;
  lProperty : TRttiProperty;
  lField : TRttiField;
begin
  Result := TStringList.create;
  LType := lContext.GetType(AClass.ClassType);
  if assigned(LType) then
  begin
    for LProperty in LType.GetProperties do
    begin
      Result.Add(lProperty.Name);
      //Get current value:
      Result.Add(lProperty.GetValue(AClass).ToString);
    end;
   for lField in LType.GetFields do
   begin
     Result.Add(lField.Name);
     //Get current value:
     Result.Add(lField.GetValue(AClass).ToString);
   end;
 end;
end;
于 2012-05-23T05:59:19.650 に答える