Delphi ^une syntaxe: documentée, implicite ou non documentée?

Laissez-moi vous expliquer par un exemple. En Delphes, vous pouvez écrire

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;

Pour vérifier les commandes du clavier Ctrl+C et CTRL + V. En fait, la même syntaxe fonctionne pour Ctrl + A, où A est n'importe quel caractère, et-bien sûr-vous pouvez également utiliser une instruction caseau lieu de if s. Vous pouvez même faire ShowMessage(^A), donc, apparemment, ^A est considéré comme un char.

Cependant, en parcourant la documentation officielle de Delphi , Je ne trouve aucune référence à cette syntaxe. Mais peut-être que le ^A la syntaxe est si commune qu'elle est comprise comme faisant partie du format de fichier texte brut sous-jacent? Ou est-ce simplement une fonctionnalité non documentée du langage de programmation Delphi? (Notez que les constructions ci-dessus sont réellement utilisées dans le code source RTL/VCL. Mais, bien sûr, Embarcadero, et Embarcadero seul, est autorisé à utiliser des fonctionnalités non documentées, le cas échéant.)

38
demandé sur Sathya 2011-02-06 23:37:12

2 réponses

C'est depuis longtemps comme un caractère d'échappement pour vous permettre d'avoir des consts pour les caractères de contrôle d'une manière plus lisible.

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

Cela définit une constante Char avec la valeur #3, puis écrit 3 dans Borland Pascal 7, et je me souviens l'avoir vu des années auparavant aussi.

Je viens de vérifier les guides de langues Turbo Pascal 5.0 et Borland Pascal 7.0, mais je ne pouvais pas le trouver, donc il semble non documenté.

Modifier: Je me souviens que C'était un truc de Borland, et juste checked : Il ne fait pas partie de la norme ISO Pascal (auparavant C'était la norme ANSI Pascal, merci Sertac de l'avoir remarqué).

Il est documenté dans le Free Pascal documentation.

SGI utilise la barre oblique inverse comme caractère d'échappement, comme selon leurs documents .

Plus Edit:, je l'ai trouvé documenté en Delphi, en un Mot et le Delphi Bases site.

Trouvé: Viens de trouver il se trouve à la page 37 du manuel de référence Turbo Pascal 3 .

--jeroen

28
répondu Jeroen Wiert Pluimers 2017-12-17 17:16:55

Ceci est une fonctionnalité non documentée connue. Mais là encore, la dernière documentation de syntaxe officielle est de delphi 7.

3
répondu Toon Krijthe 2011-02-06 21:27:43