【问题标题】:Access Enum Array in Delphi在 Delphi 中访问枚举数组
【发布时间】:2015-03-11 13:25:11
【问题描述】:

我有枚举类型:

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 结构。我想访问 LOOP 中数组的所有索引。这可能吗?

【问题讨论】:

    标签: arrays delphi enums


    【解决方案1】:

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

    i: EPosition代替i: integer

    for i := eLEFT to eDOWN do
    

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

    【讨论】:

    • 谢谢,类型转换也是可行的。但你的方式更好:)
    • 或使用for i in [Low(EPosition)..High(EPosition)] do
    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多