在Delphi中访问枚举数组

3

我有一个枚举类型:

EPosition = (eLEFT, eRIGHT, eUP, eDOWN);

和 EPosition 数组:

position: array[EPosition] of Integer;

分配:

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;

然后这里是我的错误点:
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;

它提示了不兼容的类型:'EPosition'和'Integer'。 我知道为什么会出现这个提示,我必须这样写:

    obSubImage.PreviewROI.position[eLEFT]:= 0;

但我不想使用IF-ELSE结构。我想在循环中访问数组的所有索引。这可能吗?

1个回答

10

在您的循环中,您必须使用EPosition类型变量。

请使用i: EPosition,而不是i: integer

for i := eLEFT to eDOWN do

或者
for i := Low(EPosition) to High(EPosition) do

谢谢,类型转换也是有效的。但你的方法更好 :) - Dauezevy
或者使用 for i in [Low(EPosition)..High(EPosition)] do - Disillusioned

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接