即:tmemo,tedit,tbutton,tlabel,tmediaplayer这些类值。

解决方案 »

  1.   

    那你直接把
    Type mj=class of tcontrol;
    把mj定义为类算了。
    你在控制的时候可以把它写成一个属性,
    在赋值的时候进行判断。
      

  2.   

    那你直接把
    Type mj=class of tcontrol;
    把mj定义为类算了。
    你在控制的时候可以把它写成一个属性,
    在赋值的时候进行判断。
      

  3.   

    不能直接转换,必须编写代码去作:
    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);
      

  4.   

    实际就是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;
    譬如:在一个绘图程序中,根据所选择的图标创建不同的绘图工具等。