delphi从枚举中选择一个随机值

Fra*_*anz 3 delphi

我需要一个用Java JAVA CODE解决方案的delphi解决方案

type
 TColors = (red, green, blue, white, purple, orange, yellow, black);
type
 TForm1 = class(TForm)
 Button1: TButton;
 Memo1: TMemo;
 procedure Button1Click(Sender: TObject);
 private
 { Private-Deklarationen }
 public
 { Public-Deklarationen }
 end;

 var Form1: TForm1;

 implementation

 {$R *.fmx}

 function RandomColor: TColors;
 begin
  result := blue;  //   make this random value from enum ????
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
  s := GetEnumName(TypeInfo(TColors), integer(RandomColor));
 Memo1.Lines.Add(s);   ///  print random color to memo 
end;
Run Code Online (Sandbox Code Playgroud)

Chr*_*ton 5

function RandomColor: TColors;
begin
  Result := TColors(Random(Succ(Ord(High(TColors)))));
end;

var
  MyColor: TColors;
begin
  Randomize; //call this once at startup
  MyColor := RandomColor;
Run Code Online (Sandbox Code Playgroud)

  • 我会向Ord()添加+1,否则您将永远看不到最大的枚举值。上限是排他的。 (4认同)
  • 在我的Delphi XE上使用Succ()和RANGECHECKS甚至都不会编译它。确实是个不错的解决方案。顺便说一句,为什么我们在纠正您的工作时获得所有积分? (2认同)