我在Delphi XE4中有以下行,它给了我错误:E1012 Constant expression violates subrange bounds
Message.WParam := clBtnFace;
当我调试代码时,我得到clBtnFace = -16777201
;
同样适用于Delphi 7代码。
我在stackoverflow上找到了以下链接,但无法解决我的问题: Using the `in` keyword causes "E1012 Constant expression violates subrange bounds" in Delphi
答案 0 :(得分:4)
在现代Delphi版本中,Windows数据类型的声明与Windows头文件中的定义一致。并且WPARAM
一直是一种无符号类型。但在旧版本的Delphi中,它被错误地声明为已签名。
因此,要在现代Delphi中创建代码编译器,您需要将值转换为与Message.WParam
相同的类型。该类型为WPARAM
:
Message.WParam := WPARAM(clBtnFace);