IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 【Delphi】理解枚举类型(Enum),你可能忘记的有用函数 -> 正文阅读

[JavaScript知识库]【Delphi】理解枚举类型(Enum),你可能忘记的有用函数

关于枚举类型,日常编程中经常使用到,但是是否真正理解和操作到位,可能就不一定了。Delphi中的枚举类型随处可见,例如 FMX 控件的 Align 属性 TAlignLayout,图形控件中使用的TBrushKind 都是枚举类型。

?工程文件下载

{2022-02-25 sensor 关于 枚举类型操作示例。
特别注意以下函数:
        GetEnumName:获取枚举类型对应名称字符串。GetEnumName(TypeInfo(TMyColors), 0) 将返回字符串 ' Red '。

????????GetEnumProp:获取对象枚举属性字符串。如果你直接在 Form 上放置一个 TButton,那么:GetEnumProp(Button1, 'Align') 将返回字符串' None '。初始的时候我们并没有设置Button1的 Align 属性,所以默认就是 None 。

????????GetEnumValue:通过枚举变量实际字符串,获取枚举变量的实际索引值。GetEnumValue(TypeInfo(TMyColors), 'Red') 将返回 0。

????????SetEnumProp:根据枚举字符串,设置对象的枚举属性。SetEnumProp(Button1, 'Align', 'alLeft') 设置 Button1 的 Align 属性未 alLeft 。
}
unit uMainForm;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ListBox,
  FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects;

type
  TForm2 = class(TForm)
    ComboBox_Align: TComboBox;
    Label1: TLabel;
    Button_Get: TButton;
    Button_Set: TButton;
    Rectangle1: TRectangle;
    Image: TImage;
    procedure Button_GetClick(Sender: TObject);
    procedure Button_SetClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses
  System.TypInfo;

{$R *.fmx}

procedure TForm2.Button_GetClick(Sender: TObject);
var
  i : integer;
  AlignStr : string;
begin
  //1. 获取 TAlignLayout 的列表名称字符串,放置到 Combox
  for i := Integer(Low(TAlignLayout)) to Integer(High(TAlignLayout)) do
  begin
    AlignStr := GetEnumName(TypeInfo(TAlignLayout), i);
    ComboBox_Align.ListBox.Items.AddObject(AlignStr, TObject(i));
  end;

  //2. 获取 Image 的 Align 属性索引
  AlignStr := GetEnumProp(Image, 'Align');
  //3. 通过 AlignStr 获取对应的索引值
  i := GetEnumValue(TypeInfo(TAlignLayout), AlignStr);

  //4. 设置 ComboBox_Align 的当前值
  ComboBox_Align.ItemIndex := i;

  Button_Set.Enabled := True;
end;

procedure TForm2.Button_SetClick(Sender: TObject);
var
  i : integer;
  myAlign : TAlignLayout;
begin
  //1. 获取Combox 中的 Align 值
  myAlign := TAlignLayout(Integer(ComboBox_Align.ListBox.Items.Objects[ComboBox_Align.ItemIndex]));
  //2. 设置 Image Algin 属性
  Image.Align := TAlignLayout.None;   //下面这几句是因为有些属性会更改图像大小,所以先需要恢复大小
  Image.Size.Width  := 48;
  Image.Size.Height := 48;
  Image.Align := myAlign;
  Rectangle1.Repaint;
end;

end.

举例说明如下:

TAlignLayout = (None, Top, Left, Right, Bottom, MostTop, MostBottom, MostLeft, MostRight, Client, Contents, Center, VertCenter, HorzCenter, Horizontal, Vertical, Scale, Fit, FitLeft, FitRight);

TBrushKind = (None, Solid, Gradient, Bitmap, Resource);

在程序中我们也可以自定义我们自己的枚举类型:

uses
  System.TypInfo;

type
  //关于枚举类型使用
  TMyColors = (Red, Yellow, Green, Cyan, Blue, Violet);

枚举型别(通常被缩写成enums)可以构成另一个使用者自定有序型别。在枚举类型中,我们不指定特定类型的范围,而是直接列出其中几个可能的数值,换句话说,我们只把我们需要的特定数值列出即可,举例如下:
type
? ? ?TMyColors = (Red, Yellow, Green, Cyan, Blue, Violet);
? ? ?TSuit = (Club, Diamond, Heart, Spade);
列表当中的每个值都对应一个序号,从0开始。当我们通过 Ord 函式来查找枚举类型中的特定数值,函数就会返回该数值在枚举类型中的顺序,以0为第一个元素的编号,因此Ord(Diamond)会回传1。
在 Delphi中 枚举类型有不同的内部表示方法,预设情形下,Delphi使用8位来表示它,除非有超过256个数值被列在列举型别当中,才会使用16位来表示,当然也有32位的表示法,这方法会在需要跟C或C++的函式库兼容时使用。

枚举类型的操作注意引用单元:System.TypInfo

1. 操作枚举类型的几个函数

????????GetEnumName:获取枚举类型对应名称字符串。GetEnumName(TypeInfo(TMyColors), 0) 将返回字符串 ' Red '。

????????GetEnumProp:获取对象枚举属性字符串。如果你直接在 Form 上放置一个 TButton,那么:GetEnumProp(Button1, 'Align') 将返回字符串' None '。初始的时候我们并没有设置Button1的 Align 属性,所以默认就是 None 。

????????GetEnumValue:通过枚举变量实际字符串,获取枚举变量的实际索引值。GetEnumValue(TypeInfo(TMyColors), 'Red') 将返回 0。

????????SetEnumProp:根据枚举字符串,设置对象的枚举属性。SetEnumProp(Button1, 'Align', 'alLeft') 设置 Button1 的 Align 属性未 alLeft 。

2. 如何将枚举类型显示到 Combox 列表中?

? ? ? ? 如何将?TMyColors 枚举列表显示到 Combox 中,并且可以选择使用,代码如下:

var
  i : integer;
  s : string;
begin
  for i := Integer(Low(TMyColors)) to Integer(High(TMyColors)) do
  begin
    s := GetEnumName(TypeInfo(TMyColors), i);
    ComboBox_Color.ListBox.Items.AddObject(s, TObject(i));
  end;
  ComboBox_Color.ItemIndex := 0;
end;

通过 Combox 选择,使用代码如下:

var
  i : integer;
  myColor : TMyColors;
begin
  myColor := TMyColors(Integer(ComboBox_Color.ListBox.Items.Objects[ComboBox_Color.ItemIndex]));
  ShowMessage(ord(myColor).ToString);
end;

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:22:00  更:2022-02-26 11:23:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:15:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码