枚举
- // 定义
- type
- Colors = (Red, Yellow, Green, Cyan, Blue, Violet);
- Suit = (Club, Diamond, Heart, Spade);
- // 举例:
- type
- Colors = (Red, Yellow, Green, Cyan, Blue, Violet);
- var
- C: Colors;
- begin
- C := Red;
- ShowMessage(IntToStr(Ord(C))); //0
- C := Blue;
- ShowMessage(IntToStr(Ord(C))); //4
- C := Green;
- ShowMessage(IntToStr(Integer(C))); //2; 获取元素位置用 Integer 也可以
- end;
- // 举例 2:
- type
- Tabc = (a=5,b=10,c=a+b);
- var
- ta,tb,tc: Tabc;
- begin
- ta := a;
- tb := b;
- tc := c;
- ShowMessage(IntToStr(Ord(ta))); //5
- ShowMessage(IntToStr(Ord(tb))); //10
- ShowMessage(IntToStr(Ord(tc))); //15
- end;
- // 获取枚举元素总数:
- type
- TMyEnum = (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);
- var
- m: TMyEnum;
- num: Integer;
- begin
- num := 0;
- for m := Low(TMyEnum) to High(TMyEnum) do
- Inc(num);
- ShowMessage(IntToStr(num)); // 7
- end;
- // 返回枚举元素的字符串标识:
- uses TypInfo; // 需要 uses 的单元
- type
- TMyEnum = (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);
- procedure TForm1.Button1Click(Sender: TObject);
- var
- str: string;
- begin
- str := TypInfo.GetEnumName(TypeInfo(TMyEnum),1);
- ShowMessage(str); //Tuesday
- end;
- // 获取对象枚举值的字符串表式:
- uses TypInfo; // 需要 uses 的单元
- procedure TForm1.FormCreate(Sender: TObject);
- var
- str: string;
- begin
- str := GetEnumProp(Self, 'BorderStyle');
- ShowMessage(str); { bsSizeable }
- end;
- // uses TypInfo; // 记得引用这个单元
- // type TMyStrSel = (Beijing, Tianjing, Shanghai, Chongqing);
- // 注意, 上面这个定义不能放在某个函数内部哦, 那样的话, 它就没有运行类信息了
- // var strSel: TMyStrSel;
- str := 'Chongqing';
- strSel := TMyStrSel(GetEnumValue(TypeInfo(TMyStrSel), str));
- case strSel of
- Beijing: ShowMessage('First');
- Tianjing: ShowMessage('Second');
- Shanghai: ShowMessage('Third');
- Chongqing: ShowMessage('Forth');
- else ShowMessage('Other');
- end;
来源: http://www.bubuko.com/infodetail-2987832.html