如何将匿名枚举类型传递给子例程?
How to pass an anonymous enumerated type into a subroutine?
我正在尝试创建一个方便的函数来将 System.Classes.TShiftState
转换为用户可读的字符串。为了方便起见,我做了一个子程序来执行公共代码,使功能更紧凑。
问题是,我不知道如何将 TShiftState
枚举类型之一传递到该子例程中。我尝试了 Byte
、Integer
和 Cardinal
,但我一直收到 Incompatible types: 'Byte' and 'Enumeration'
(或我尝试的任何类型)。将鼠标悬停在其中之一上只会显示 </code> 通常类型所在的位置。</p>
<pre><code>function ShiftStateStr(const Shift: TShiftState): String;
procedure A(const Sh: Byte; const Str: String);
begin
if Sh in Shift then
Result:= Result + StrLen(Str, Length(Str)+1)
else
Result:= Result + StrLen('', Length(Str)+1);
end;
begin
Result:= '';
A(ssShift, 'Shift');
A(ssAlt, 'Alt');
A(ssCtrl, 'Ctrl');
A(ssLeft, 'Left');
A(ssRight, 'Right');
A(ssMiddle, 'Middle');
A(ssDouble, 'Double');
A(ssTouch, 'Touch');
A(ssPen, 'Pen');
A(ssCommand, 'Cmd');
A(System.Classes.ssHorizontal, 'Horz');
end;
NOTE: StrLen
is a separate function which pads a string with spaces of a given length.
TShiftState
在 System.Classes
中定义如下:
type
TShiftState = set of (ssShift, ssAlt, ssCtrl,
ssLeft, ssRight, ssMiddle, ssDouble, ssTouch, ssPen, ssCommand, ssHorizontal);
我怎样才能正确地将它传递给 A
子例程?
将 A
的第一个参数更改为 const Sh: TShiftState
。然后将对 A 的每次调用更改为
形式
A([ssShift], 'Shift');
最后条件测试成
if Sh <= Shift then
参考。 Expressions
X <= Y is True just in case every member of X is a member of Y
我正在尝试创建一个方便的函数来将 System.Classes.TShiftState
转换为用户可读的字符串。为了方便起见,我做了一个子程序来执行公共代码,使功能更紧凑。
问题是,我不知道如何将 TShiftState
枚举类型之一传递到该子例程中。我尝试了 Byte
、Integer
和 Cardinal
,但我一直收到 Incompatible types: 'Byte' and 'Enumeration'
(或我尝试的任何类型)。将鼠标悬停在其中之一上只会显示 </code> 通常类型所在的位置。</p>
<pre><code>function ShiftStateStr(const Shift: TShiftState): String;
procedure A(const Sh: Byte; const Str: String);
begin
if Sh in Shift then
Result:= Result + StrLen(Str, Length(Str)+1)
else
Result:= Result + StrLen('', Length(Str)+1);
end;
begin
Result:= '';
A(ssShift, 'Shift');
A(ssAlt, 'Alt');
A(ssCtrl, 'Ctrl');
A(ssLeft, 'Left');
A(ssRight, 'Right');
A(ssMiddle, 'Middle');
A(ssDouble, 'Double');
A(ssTouch, 'Touch');
A(ssPen, 'Pen');
A(ssCommand, 'Cmd');
A(System.Classes.ssHorizontal, 'Horz');
end;
NOTE:
StrLen
is a separate function which pads a string with spaces of a given length.
TShiftState
在 System.Classes
中定义如下:
type
TShiftState = set of (ssShift, ssAlt, ssCtrl,
ssLeft, ssRight, ssMiddle, ssDouble, ssTouch, ssPen, ssCommand, ssHorizontal);
我怎样才能正确地将它传递给 A
子例程?
将 A
的第一个参数更改为 const Sh: TShiftState
。然后将对 A 的每次调用更改为
A([ssShift], 'Shift');
最后条件测试成
if Sh <= Shift then
参考。 Expressions
X <= Y is True just in case every member of X is a member of Y