在Delphi中访问Enum数组

Dau*_*evy 2 arrays delphi enums

我有枚举类型:

EPosition = (eLEFT, eRIGHT, eUP, eDOWN);
Run Code Online (Sandbox Code Playgroud)

和EPosition数组:

position: array[EPosition] of Integer;
Run Code Online (Sandbox Code Playgroud)

分配 :

if (Key = VK_UP) then
  begin
    position[eTOP]:= 1;
  end;

  if (Key = VK_DOWN) then
  begin
    position[eDOWN]:= 1;
  end;

  if (Key = VK_LEFT) then
  begin
    position[eLEFT]:= 1;
  end;

  if (Key = VK_RIGHT) then
  begin
    position[eRIGHT]:= 1;
  end;
Run Code Online (Sandbox Code Playgroud)

那么这是我的错误点:

for I := 0 to 3 do
    begin
      if obSubImage.PreviewROI.position[I] = 1 then
      begin
        obSubImage.RenderROI.width:= abs(oldNewDiff.X);
        obSubImage.RenderROI.height:= formMain.imgPreview.IEBitmap.Height;
        obSubImage.RenderROI.x:= obSubImage.PreviewROI.x;
        obSubImage.RenderROI.y:= obSubImage.PreviewROI.y;
        panOffsetX:= 0;
        panOffsetY:= 0;
        obSubImage.PreviewROI.position[I]:= 0;
        renderLayer(0);
      end;
    end;
Run Code Online (Sandbox Code Playgroud)

它提供了一种不兼容的类型:'EPosition'和'Integer'.我知道它为什么给,我必须写得像;

    obSubImage.PreviewROI.position[eLEFT]:= 0;
Run Code Online (Sandbox Code Playgroud)

但我不想使用IF-ELSE结构.我想在LOOP中访问所有索引的数组.那可能吗?

Dal*_*kar 8

你必须EPosition在循环中使用类型变量.

而不是i: integer使用i: EPosition

for i := eLEFT to eDOWN do
Run Code Online (Sandbox Code Playgroud)

要么

for i := Low(EPosition) to High(EPosition) do
Run Code Online (Sandbox Code Playgroud)