那你直接把 Type mj=class of tcontrol; 把mj定义为类算了。 你在控制的时候可以把它写成一个属性, 在赋值的时候进行判断。
那你直接把 Type mj=class of tcontrol; 把mj定义为类算了。 你在控制的时候可以把它写成一个属性, 在赋值的时候进行判断。
不能直接转换,必须编写代码去作: type mj=(mtbutton,mtmemo,mtedit);//不要和类名重名! type tcla=class of tcontrol;type TClassMap = record key:mj; theCalss:tcla; end; const ClassMaps:Array [0..2] of TClassmap = ((mtbutton,TButton),(mtmemo,TMemo),(mtedit,TEdit)); function EnumToClass(key:mj):tcla; var i:Integer; begin i := 0; while (i <=2 ) and (key <> ClassMaps[i]) do Inc(i); if i <= 2 then Result = ClassMaps[i] else Result = Nil; end;var mjx:mj; cla:tcla;mjx:=mtbutton; cla:=EnumToClass(mjx);
实际就是Celon设计模式的一个变种!1、基础对象设定一个Celon函数,如:function TBaseClass.DuplicateSelf:TBaseClass;//virtual method begin Result:=TBaseClass.Create; Result.Assign(self);//Assign property & etc end;2、为多种派生对象重载该方法;TNewClassN=class(TBaseClass)……function TNewClassN.DuplicateSelf:TNewClassN;//override method begin Result:=TNewClassN.Create; Result.Assign(self);//Assign property & etc end; 3、设定初始的多种对象,并按照枚举顺序排列在基础类数组中:ClassTypeArr:array[enumLowNumber..enumHighNumber] of TBaseClass;ClassTypeArr[0]:=TNewClass0.Create;ClassTypeArr[1]:=TNewClass1.Create;……4、相应调用:NewObj:=ClassTypeArr[enumCurrentType].DuplicateSelf; 譬如:在一个绘图程序中,根据所选择的图标创建不同的绘图工具等。
Type mj=class of tcontrol;
把mj定义为类算了。
你在控制的时候可以把它写成一个属性,
在赋值的时候进行判断。
Type mj=class of tcontrol;
把mj定义为类算了。
你在控制的时候可以把它写成一个属性,
在赋值的时候进行判断。
type mj=(mtbutton,mtmemo,mtedit);//不要和类名重名!
type tcla=class of tcontrol;type
TClassMap = record
key:mj;
theCalss:tcla;
end;
const ClassMaps:Array [0..2] of TClassmap =
((mtbutton,TButton),(mtmemo,TMemo),(mtedit,TEdit));
function EnumToClass(key:mj):tcla;
var
i:Integer;
begin
i := 0;
while (i <=2 ) and (key <> ClassMaps[i]) do
Inc(i);
if i <= 2 then
Result = ClassMaps[i]
else
Result = Nil;
end;var mjx:mj;
cla:tcla;mjx:=mtbutton;
cla:=EnumToClass(mjx);
begin
Result:=TBaseClass.Create;
Result.Assign(self);//Assign property & etc
end;2、为多种派生对象重载该方法;TNewClassN=class(TBaseClass)……function TNewClassN.DuplicateSelf:TNewClassN;//override method
begin
Result:=TNewClassN.Create;
Result.Assign(self);//Assign property & etc
end;
3、设定初始的多种对象,并按照枚举顺序排列在基础类数组中:ClassTypeArr:array[enumLowNumber..enumHighNumber] of TBaseClass;ClassTypeArr[0]:=TNewClass0.Create;ClassTypeArr[1]:=TNewClass1.Create;……4、相应调用:NewObj:=ClassTypeArr[enumCurrentType].DuplicateSelf;
譬如:在一个绘图程序中,根据所选择的图标创建不同的绘图工具等。