【问题标题】:Delphi ^A syntax: Documented, implied, or undocumented?Delphi ^A 语法:记录的、隐含的还是未记录的?
【发布时间】:2011-06-22 09:41:47
【问题描述】:

让我通过一个例子来解释。在Delphi中,你可以写

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = ^C then
    ShowMessage('The user wants to copy something.')
  else if Key = ^V then
    ShowMessage('The user wants to paste.')
end;

检查 Ctrl+C 和 Ctrl+V 键盘命令。事实上,同样的语法适用于 Ctrl+A,其中 A 是 any 字符,而且——当然——你也可以使用case 语句来代替ifs。你甚至可以使用ShowMessage(^A),所以,显然^A 被认为是char

但是,在浏览the official Delphi documentation 时,我找不到任何对这种语法的引用。但也许^A 语法是如此普遍以至于它被理解为底层纯文本文件格式的一部分?或者它只是 Delphi 编程语言的一个未记录的特性? (请注意,上述结构实际上用于 RTL/VCL 源代码。但是,当然,Embarcadero 和 Embarcadero 单独允许使用未记录的功能,如果存在的话。)

【问题讨论】:

  • 任何人都可以使用未记录的功能
  • @David:好的,我同意问题并不像 Windows API 的情况那么严重。
  • 其中一些,错误洞察不喜欢,比如^[ (Esc)、^@ (NUL)..
  • 我又从 SO 中学到了一些新东西(在 13 岁之后使用 Delphi!)
  • Pascal ISO 7185:1990 具有 ISO/IEC 646 作为规范性参考(第 7 页),最初定义为 C0 control codes。也许这是一种暗示它的方式。

标签: delphi syntax keyboard character


【解决方案1】:

这是很久以前的转义字符,使您能够以更易读的方式为控制字符设置 const。

const
  CtrlC = ^C;
begin
  Write(Ord(CtrlC));
end.

这定义了一个值为 #3 的 Char 常量,然后在 Borland Pascal 7 中写入 3,我记得在那之前几年也看到过。

我刚刚检查了 Turbo Pascal 5.0 和 Borland Pascal 7.0 语言指南,但找不到它,所以它似乎没有记录。

编辑: 我记得这是 Borland 的东西,只是 checked:它不是 ISO Pascal 标准的一部分(以前这是 ANSI Pascal 标准,感谢 Sertac 注意到这一点)。

It记录在Free Pascal documentation中。

SGI 使用反斜杠作为转义字符,如per their docs

更多编辑:我找到了documented in Delphi in a NutshellDelphi Basics site

找到了:刚刚在Turbo Pascal 3 Reference Manual的第37页找到了。

--杰罗恩

【讨论】:

  • 自 1993 年 ANSI 代表 ISO 标准终止帕斯卡语言以来,没有关于帕斯卡语言的 ANSI 标准。关于 ISO 标准,请参阅我对 Andreas 问题的评论。
  • 这是一个很好的答案!谢谢!
  • 提供 FPC 文档链接 (IT) 的已编辑评论
  • 是的,如果主题移动或拆分,链接可能会失效。我必须先“向上”,然后再进入主题/部分。更新链接。
  • Turbo Pascal Version 2.0 Reference 第 45 页也提到了这一点。
【解决方案2】:

这是一个已知的未记录功能。不过话说回来,最新的官方语法文档来自 delphi 7。

【讨论】:

  • 你能描述一下吗? ^A 的类型是什么?
  • 对,它是一个 Char 并且 ord(^A)=1,^G 是铃铛!
  • @David,它的类型是“字符串文字”,就像你使用 #1 一样。编译器会将其视为上下文指示的字符或字符串。它在所有版本的 Delphi 以及许多(如果不是全部)版本的 Turbo Pascal 中都有效。
  • @Rob Kennedy:+1,因为它是从 Turbo Pascal 继承的。我记得在 TP/BP 的帮助系统中有很好的描述。
  • 几百年前我在 turbo pascal 5.5 中使用过它...当时写(^G) 来通知用户错误的事情很有用...你仍然可以去 cmd .exe 并“执行”ctrl+G。 :p @David,你让我想起了很多旧事……呵呵。 :D。顺便说一句,它一定是 AnsiChar 而不是 char... 对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多