type Minerals=(Ca,P,Mg,Cl,K,Na,Su,Co,Cu,I,Fe,Mn,Se,Zn,Mo,VitA,VitD,VitE);
这是一个枚举类型,我想在函数中调用枚举类型中某一个值(例如ca):
with ca do
end;
我想用枚举类型表示上面的语句怎么写?
with minerals(1) do
end; 
可以这样吗?
如果不是这样,应该怎么写,我不想每次都要列举。

解决方案 »

  1.   

    你对枚举类型的概念有误。
    枚举是一个值,不存在with 枚举值 do这类的语法。
    举个简单例子
    type 
      TColor = (Red,Yellow,Blue);var
    x: TColor;那么x赋值只能是
    x:=Red;
    x:=Yellow;
    x:=Blue;如果要函数传递参数,那么
    比如定义一个函数
    function getColor(x: TColor): string;
    begin
        case x of
            Red: Result := '红色';
            Yellow: Result := '黄色';
            Blue: Result := '蓝色';
            else
                Result := '未知';
        end;
    end;调用
    getColor(Red);或者传入变量
    var
        x: TColor;
        x := Red;
    getColor(x);你明白了没?
      

  2.   


    是这个意思吗?type Minerals=(Ca,P,Mg,Cl,K,Na,Su,Co,Cu,I,Fe,Mn,Se,Zn,Mo,VitA,VitD,VitE);procedure TForm1.Button1Click(Sender: TObject);
    var
            mm: Minerals;
            mCount: integer;
    begin
            mCount := 0;
            for mm:= Ca to Vite do
                    Inc(mCount);        ShowMessage(IntToStr(mCount)); //18
    end;
      

  3.   

    uses TypInfo;type Minerals=(Ca,P,Mg,Cl,K,Na,Su,Co,Cu,I,Fe,Mn,Se,Zn,Mo,VitA,VitD,VitE);procedure TForm1.Button1Click(Sender: TObject);
    var
      i,nCount:integer;
    begin
      nCount:=Integer(High(Minerals)); //元素数量,后面要+1,这里是用来从0开始循环,所以没有加
      for i:=0 to nCount do //列出所有元素
         ShowMessage(GetEnumName(TypeInfo(Minerals),i));
    end;