为什么我不能在TRecord中使用Variable?

时间:2016-03-14 14:47:49

标签: delphi delphi-7 record

我对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):期望的常量表达式

此错误发生在此阵列的所有行中。

任何人都可以帮助我吗?

提前致谢。

1 个答案:

答案 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声明为变量。