我对TRecord的使用存有疑问。
我可以在记录属性中使用VAR吗?
例如:
我的记录:
TStyleEvalue = record
ID: Integer;
Value: TFontStyles;
Name: String;
end;
当我尝试将Name
属性中的VAR归为以下代码时:
StylesEvalueArray : array[0..15] of TStyleEvalue = (
(ID: 00; Value: []; Name: LB_NORMAL),
(ID: 01; Value: [fsBold]; Name: LB_NEGRITO),
(ID: 02; Value: [fsItalic]; Name: LB_ITALICO),
(ID: 03; Value: [fsBold,fsItalic]; Name: LB_NEGRITO+', '+LB_ITALICO),
(ID: 04; Value: [fsUnderline]; Name: LB_SUBLINHADO),
(ID: 05; Value: [fsBold,fsUnderline]; Name: LB_NEGRITO+', '+LB_SUBLINHADO),
(ID: 06; Value: [fsItalic,fsUnderline]; Name: LB_ITALICO+', '+LB_SUBLINHADO),
(ID: 07; Value: [fsBold,fsItalic,fsUnderline]; Name: LB_NEGRITO+', '+LB_ITALICO+', '+LB_SUBLINHADO),
(ID: 08; Value: [fsStrikeOut]; Name: LB_TACHADO),
(ID: 09; Value: [fsBold,fsStrikeOut]; Name: LB_NEGRITO+', '+LB_TACHADO),
(ID: 10; Value: [fsItalic,fsStrikeOut]; Name: LB_ITALICO+', '+LB_TACHADO),
(ID: 11; Value: [fsBold,fsItalic,fsStrikeOut]; Name: LB_NEGRITO+', '+LB_ITALICO+', '+LB_TACHADO),
(ID: 12; Value: [fsUnderline,fsStrikeOut]; Name: LB_SUBLINHADO+', '+LB_TACHADO),
(ID: 13; Value: [fsBold,fsUnderline,fsStrikeOut]; Name: LB_NEGRITO+', '+LB_SUBLINHADO+', '+LB_TACHADO),
(ID: 14; Value: [fsItalic,fsUnderline,fsStrikeOut]; Name: LB_ITALICO+', '+LB_SUBLINHADO+', '+LB_TACHADO),
(ID: 15; Value: [fsBold,fsItalic,fsUnderline,fsStrikeOut]; Name: LB_NEGRITO+', '+LB_ITALICO+', '+LB_SUBLINHADO+', '+LB_TACHADO)
);
我收到此错误消息:
[错误] FormFontChange.pas(102):期望的常量表达式
此错误发生在此阵列的所有行中。
任何人都可以帮助我吗?
提前致谢。
答案 0 :(得分:4)
您正在声明一个类型化常量。用于类型化常量的值必须是所谓的常量表达式。可以在此处找到文档:http://docwiki.embarcadero.com/RADStudio/en/Declared_Constants#Typed_Constants
对于此处的示例,相关部分是涵盖record constants的部分。文档说:
要声明记录常量,请指定每个字段的值 - 作为fieldName:value,字段分配用分号分隔 - 在声明末尾的括号中。值必须用常量表达式表示。
编译器告诉您LB_NORMAL
不是常量表达式。我们不知道LB_NORMAL
是什么,但它必须是与string
类型兼容的常量表达式。例如:
const
LB_NORMAL = 'foo';
就足够了。甚至:
const
foo = 'foo';
bar = 'bar';
LB_NORMAL = foo + bar;
但是,您定义LB_NORMAL
,它不是常量表达式。您可能需要查阅constant expressions的文档以了解如何继续。
你似乎暗示在文中,虽然不清楚而且遗憾的是你没有显示LB_NORMAL
是什么,LB_NORMAL
是一个变量。嗯,变量不是常量表达式。如果LB_NORMAL
确实是变量,则您还必须将StylesEvalueArray
声明为变量。