首页 > 其他分享 >delphi 里的 枚举

delphi 里的 枚举

时间:2024-07-29 12:28:07浏览次数:14  
标签:Blue cl delphi Lines Add 枚举 memo1

初始值随机

若定义一个枚举,他初始化是随机的,并不是第一个元素如:

image

所以若一个类包含了枚举类型,一定要给其赋值,否则就会乱套;

枚举不能为nil

image

枚举的零值 是随机 数字,值类型,不是对象类型;

定义时指定数字值

//在这个例子中,`cRed` 的值是 1,`cGreen` 的值是 2,`cBlue` 的值是 4。注意,这些值不必是连续的
TColor2 = (cRed = 1, cGreen = 2, cBlue = 4); 

image

枚举与字符串互转

procedure TForm2.Button3Click(Sender: TObject);
var
  od: Integer;
  s: string;
  cl: TColor;
begin
  //获取元素的序号
  cl := Red;
  memo1.Lines.Add(IntToStr(Ord(cl)));  //0
  cl := Blue;
  memo1.Lines.Add(IntToStr(Ord(cl)));  //3

  //枚举转字符串方式一(常用简单), uses System.TypInfo
  memo1.Lines.Add(GetEnumName(TypeInfo(TColor), 2));//Green 知道枚举序号,一般不会使用这个
  memo1.Lines.Add(GetEnumName(TypeInfo(TColor), Ord(Blue)));//Blue 一般使用这个

  //枚举转字符串方式二(RTTI), uses System.Rtti
  memo1.Lines.Add(TValue.From<TColor>(Blue).ToString);//Blue

  //字符串转枚举,uses System.TypInfo
  s := 'Blue';
  od := GetEnumValue(TypeInfo(TColor), s); //3
  memo1.Lines.Add(od.ToString);
  cl := TColor(od);
  case cl of
    Red: memo1.Lines.Add('Red');
    Yellow: memo1.Lines.Add('Yellow');
    Green: memo1.Lines.Add('Green');
    Blue: memo1.Lines.Add('Blue');  //Blue
  end;
  //即字符串转枚举是: EColors(GetEnumValue(TypeInfo(EColors), s));
end;

image

标签:Blue,cl,delphi,Lines,Add,枚举,memo1
From: https://www.cnblogs.com/del88/p/18329842

相关文章

  • 使用与枚举子集的匹配进行详尽匹配
    给出以下定义:classMyEnum(IntEnum):a=1b=2c=3d=4我正在寻找一个替换SomeExpression的表达式,它将静态断言值myEnum是该分支中的MyEnum.c|MyEnum.d–这样底部的“从不”情况就正确了推断类型never–当......
  • 数据结构(Java):反射&枚举&Lambda表达式
    目录1、反射1.1反射的定义1.2 反射机制的原理1.3反射相关类1.4 Class类1.4.1相关方法1.4.1.1 常用获得类相关的方法​编辑1.4.1.2 常用获得类中属性相关的方法 1.4.1.3 获得类中构造器相关的方法  1.4.1.4 获得类中方法相关的方法1.4.2获取Class对象......
  • Partial类、枚举、结构体
    1.Partial示例:命名空间一样,类名一样:  如上所示,tb_Employee是一张数据库表,如果数据库增加了新的字段,VS中就会更新类,如果在主程序中调用Report方法,并将Report方法写道Partial类中,Partial类中的数据就不会被覆盖;2.winfrom窗口,winfrom设计器的代码就是一个Partial类;3.枚举的......
  • delphi调用Java类
    1、jdk的安装:https://www.cnblogs.com/ljk2008/p/18324820。2、jvm.dll:如果提示找不到JVM.dll需要在classpath、path中分别添加jvm.dll的路径。3、用到三方库:https://github.com/aleroot/DelphiJNI.git。4、JAVA类(CLASS、JAR)要放置在对应的文件夹内,如:packagecom.com1.com2;对......
  • delphi android发送与接收广播
    在Delphi中,可以使用TLocalBroadcastManager类来发送和接收广播。以下是一个示例:发送广播:```delphiuses Androidapi.JNI.GraphicsContentViewText,Androidapi.Helpers,Androidapi.JNI.JavaTypes,Androidapi.JNI.LocalBroadcastManager;procedureSendBroadcast(constAAction:......
  • 算法 —— 暴力枚举
    目录循环枚举P2241统计方形(数据加强版)P2089烤鸡P1618三连击(升级版)子集枚举P1036[NOIP2002普及组]选数P1157组合的输出排列枚举 P1706全排列问题P1088[NOIP2004普及组]火星人循环枚举顾名思义,通过for循环或者while循环枚举所有可能方案。 P2241统计......
  • Delphi CnPack CnRs232 以16进制 串口发送消息 WriteCommData
    使用Delphi组件CnPack里面的CnRs232,以十六进制对串口发送消息 WriteCommData找了好久,尝试了N个方法,不想安装MSComm,SPComm在新版Delphi有点怪怪的,还是用cnRs232直接上代码:procedure TForm1.Button1Click(Sender: TObject);var  DataArray:array of byte; Wl......
  • Delphi Variant 判断是否为空
    VarIsEmpty和VarIsNull在Delphi中都是用于判断Variant类型变量的函数,但它们之间有着明显的区别:VarIsEmptyVarIsEmpty函数用于判断一个Variant变量是否未被初始化或显式地被设置为空状态。当一个Variant变量被声明后尚未被赋予任何值,或者通过某种方式被设置为表示空......
  • 两数之和-枚举
    题目描述:个人题解:    可以先枚举出数组中的每一个数x,寻找数组中是否存在(target-x),当我们使用遍历整个数组的方式寻找(target-x)时,需要注意到每一个位于x之前的元素都已经和x匹配过,因此不需要再进行匹配。而每一个元素不能被使用两次,所以我们只需要在x......
  • rust 初探 -- 枚举和模式匹配
    rust初探–枚举和模式匹配定义枚举enumIpAddrKind{//将数据附加到枚举的变体中//-不需要额外使用struct//-每个变体可以拥有不同的类型以及关联的数据量V4(String),V6(String),}可以使用impl为枚举定义方法enumIpAddrKind{......