Number of elements in a enumerated Delphi type

How can I programmatically determine the number of elements of a enumerated type ?
For example, there is some the declaration
type
 TNumbers = (Zero,One,Two,Three  ...);

I need to find in my code the number of elements of TNumbers
Thanks
LVL 1
LeTayAsked:
Who is Participating?
 
MerijnBSr. Software EngineerCommented:
Try this:

type TNumbers = (Zero, One, Two, Three);
var i: integer;
begin
 i := integer(High(TNumbers)) + 1;   // i is now 4
end;

Open in new window

0
 
gskoczylasSenior Software DeveloperCommented:
Count := Succ(Ord(High(TNumbers));

The build-in function High() returns the highest element of the enumerated type.
0
 
Geert GOracle dbaCommented:
with runtime type information from the TypInfo unit you can even get the name
and the number of elements

here is a sample:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TNumbers = (One, Two, Three, Four, Five);

  TForm1 = class(TForm)
    Button1: TButton;
    ComboBox1: TComboBox;
    procedure Button1Click(Sender: TObject);
  private
    procedure ListNumbers(List: TStrings);
  end;

var
  Form1: TForm1;

implementation

uses TypInfo;

{$R *.dfm}

procedure TForm1.ListNumbers(List: TStrings);
var
  I: TNumbers;
begin
  for I := Low(TNumbers) to High(TNumbers) do
    List.Add(GetEnumName(TypeInfo(TNumbers), Integer(I)));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListNumbers(Combobox1.Items);
end;

end.

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.