我更像是一个 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
的括号(当您将鼠标悬停在它上面时,它不会给您太多时间来阅读它)。
做我想做的事情的正确方法是什么?
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'));
Inc()
引用了一个变量,但你传递给它的是一个常量。
试试这个:
j := TWizPages(Ord(Low(TWizPages)) + (Key-Ord('0')));