gpt4 book ai didi

delphi - 如何将匿名枚举类型传递到子例程中?

转载 作者:行者123 更新时间:2023-12-03 14:52:57 25 4
gpt4 key购买 nike

我正在尝试创建一个方便的函数来将 System.Classes.TShiftState 转换为用户可读的字符串。为了方便起见,我制作了一个子程序来执行通用代码,使功能更加紧凑。

问题是,我无法弄清楚如何将 TShiftState 枚举类型之一传递到此子例程中。我尝试了ByteIntegerCardinal,但我不断收到不兼容的类型:'Byte'和'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;

NOTE: StrLen is a separate function which pads a string with spaces of a given length.

TShiftStateSystem.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

关于delphi - 如何将匿名枚举类型传递到子例程中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40688649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com