我打算为TCheckBox写一个Live Binding源表达式:
SourceExpression = '(Checked = False) and (Enabled = True)'
执行代码时,提示异常:
Expected EOF - trailing text in expression
Delphi XE2 Live Binding是否支持布尔运算符?
答案 0 :(得分:1)
不,不直接支持布尔运算符。
来自docu:
您可以在表达式中使用以下数学符号:
- 常数:nil True False Pi
- 算术运算符:+ - * /
- 逻辑运算符:=<> < < => > =
- 圆括号,(),用于更改运算符优先级。
但您可以使用the builtin functions IfAll()
, IfAny()
and IfThen()
代替and
,or
和not
:
SourceExpression := 'IfAll(IfThen(Checked, False, True), Enabled)'
或者你register your own functions。
我测试了这个4 XE4,但它应该适用于XE2 2。
A or B
:IfAny(A, B)
A and B
:IfAll(A, B)
not A
:IfThen(A, False, True)
A xor B
:IfAll(IfAny(A, B), IfThen(IfAll(A,B), False, True))