Jer*_*dge 7 delphi enums subroutine delphi-10-seattle
我正在尝试将一个方便的函数转换System.Classes.TShiftState为用户可读的字符串.为了方便起见,我做了一个子程序来执行公共代码,使函数更紧凑.
问题是,我无法弄清楚如何将其中一个TShiftState枚举类型传递给此子例程.我想Byte,Integer和Cardinal,但我不断收到Incompatible types: 'Byte' and 'Enumeration'(或任何类型的我尝试).将鼠标悬停在其中一个上只显示$1该类型通常所在的位置.
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;
Run Code Online (Sandbox Code Playgroud)
注意:
StrLen是一个单独的函数,用一个给定长度的空格填充字符串.
TShiftState定义System.Classes如下:
type
TShiftState = set of (ssShift, ssAlt, ssCtrl,
ssLeft, ssRight, ssMiddle, ssDouble, ssTouch, ssPen, ssCommand, ssHorizontal);
Run Code Online (Sandbox Code Playgroud)
我怎样才能正确地将其传递到A子程序中?
将第一个参数更改A为const Sh: TShiftState.然后将每次调用A更改为表单
A([ssShift], 'Shift');
Run Code Online (Sandbox Code Playgroud)
最后是条件测试
if Sh <= Shift then
Run Code Online (Sandbox Code Playgroud)
参考.表达式
如果X的每个成员都是Y的成员,则X <= Y为True