【发布时间】:2013-01-28 14:10:16
【问题描述】:
我有这段代码可以根据列数据为网格行着色(网格来自 devexpress)
var
AColumn: TcxCustomGridTableItem;
gs: variant;
begin
AColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName('COLOR');
gs := ARecord.Values[AColumn.Index];
if VarType(gs) and VarTypeMask = varString or varUString then
AStyle.Color := gs; //<<<----- exception
color 字段是 varchar (firebird),包含诸如 cllime、clred 等值...
但我在异常注释的行中收到错误“无法将类型(UnicodeString)的变体转换为类型(布尔)”。我应该改变什么?
谢谢
【问题讨论】:
-
AStyle.Color属性是布尔类型(基于编译器错误)。AStyle是如何声明的?无论如何,您可以使用if VarIsType(gs, [varString, varUString]) then来检查gs中的值是否属于某种类型。 -
@TLama:我对变体类型了解不多,但
if部分看起来很可疑。它可能是正确的吗? [看起来 OP 几乎认为编译器接受自然语言输入!] -
@TLama
AStyle.Color属于 TCOLOR 类型,编译器接受行为什么会引发异常? -
if 中的逻辑需要括号。而且你不能神奇地将字符串变成颜色。您应该在您的字段上使用 AsString,然后使用 IIRC IdentToColor。
-
varUstring 不是布尔值!所以试试
if (VarType(gs) and VarTypeMask = varString) or (VarType(gs) and VarTypeMask = varUString) then ...
标签: delphi