クラス名(String)でクラスをインスタンス化したい

解決


taro  2018-11-16 03:00:14  No: 49607

インスタンス化したいクラスはTPersistentClassを継承していないので
GetClassが使用できません。
クラス階層は変更したくない為色々調べてみたのですがClasses.pasのTRegGroup.GetClass、TRegGroup.RegisterClass等を参照して
RegGroupsレイヤーを取り除いて単純化すればよいと他のサイト等で見かけました。
ただ、実際にソースを見ていても今いちよくわからずこちらに書き込みした次第です。
初歩的な質問で申し訳ないのですがどなたかご教授いただけませんでしょうか。


AAA  2018-11-16 17:50:36  No: 49608

type
  TObjectClass = class of TObject;

var
  ClassList: TStringList;

implementation

procedure RegisterClasses2(Value: TObjectClass);
begin
    ClassList.AddObject(Value.ClassName,TObject(Value));
end;

function GetClass2(Value: String): TObjectClass;
var
    I: Integer;
begin
    I := ClassList.IndexOf(Value);
    if I <> -1 then
    begin
      Result := TObjectClass(ClassList.Objects[I]);
    end;
end;


taro  2018-11-27 23:18:52  No: 49609

なんとか解決できました。
ありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加