在pb中动态生成对象时可以用:
create using 类名字串
的方式,
在deplhi中,该如何做呢?或说如何据一个类的类名字串动态生成对象实例。
constructor create(owner:TObject);
var
mscomm:Tmscomm;
Begin
mscomm:=Tmscomm.create(owner:TObject);
end;
你好, 使用FindClass能解决你的问题.
请看如下代码
var
C: string;
f: TComponent;
begin
C := TEdit;
if FindClass(c) <> nil then
f := FindClass.Create(self);
C := TButton;
if FindClass(c) <> nil then
f := FindClass.Create(self);
end;
TClassList = class
private
FClassList: TList;
function GetClass(Name : String) : TObject;
public
constructor create;
destructor Destroy;
function CreateByName(name : String): TObject;
procedure RegisterClass(newclass: TClass);
property ClassList[name: String]: TObject read GetClass;
end;
constructor TClassList.Create;
begin
FClasslist := TList.Create;
end;
destrucutor TClassList.Destroy;
begin
freeAndNil(FClassList);
end;
function TClassList.CreateByName(Name : string): TObject;
begin
try
Result := ClassList[Name].Create;
except
raise Exception.Create(Format("类%S不存在或者没有注册", [Name]);
end;
end;
function TCLassList.GetClass(Name: String);
var
I: Integer;
begin
for I := 0 to FClassList.count - 1 do
begin
Result := TClass(FClassList.Items[i]);
if SameText(Result.ClassName, Name) then Exit
end;
end;