Get Enumerated type by Inc(type, Index) says Left Side cannot be assigned to?

问题描述 投票:0回答:2

我更像是一个 C/C++ 的人,但我正在将一个 pascal 模块从向导中的整数类型转换为枚举类型,并且有以下障碍(它是通过 Alt-0 直接选择一个页面到 Alt- 9):

procedure TfrmWizard.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  i, j: TWizPages;
begin
  j := Inc(Low(TWizPages), Key-Ord('0')); // << line with problem

IDE 抱怨

Left side cannot be assigned to
的逗号和最后一个关于
Incompatible types
的括号(当您将鼠标悬停在它上面时,它不会给您太多时间来阅读它)。

做我想做的事情的正确方法是什么?

delphi pascal
2个回答
2
投票

Inc
是一个过程,而不是像
Succ
这样的函数。它增加第一个不能是常量的值。这是工作版本:

procedure TfrmWizard.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  i, j: TWizPages;
begin
  j := Low(TWizPages);
  Inc(j, Key-Ord('0'));

0
投票

Inc()
引用了一个变量,但你传递给它的是一个常量。

试试这个:

j := TWizPages(Ord(Low(TWizPages)) + (Key-Ord('0')));
© www.soinside.com 2019 - 2024. All rights reserved.