Delphi ^ A语法:记录,隐含或无证?

问题描述 投票:38回答:2

让我举个例子来解释一下。在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是任何字符,当然 - 您也可以使用case语句而不是ifs。你甚至可以做ShowMessage(^A),所以,显然,^A被认为是char

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

delphi syntax keyboard character
2个回答
28
投票

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

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页找到它。

- meroon


3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.