42 votes

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

Je m'explique par un exemple. Dans Delphi, 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 Ctrl+C et Ctrl+V au clavier des commandes. En fait, la même syntaxe fonctionne pour Ctrl+A, où A est tout caractère, et-bien sûr-vous pouvez également utiliser un case déclaration au lieu de ifs. Vous pouvez même le faire ShowMessage(^A), de sorte que, apparemment, ^A est considéré comme un char.

Cependant, en parcourant l'officiel Delphi documentation, je ne trouve aucune référence à cette syntaxe. Mais peut-être l' ^A syntaxe est tellement courante qu'elle est comprise comme une partie de la sous-jacentes de la plaine format de fichier texte? Ou est-ce simplement une fonctionnalité non documentée de l'Delphi langage de programmation? (Notez que les constructions sont effectivement utilisés dans les RTL/VCL code source. Mais, bien sûr, Embarcadero, et Embarcadero seul, est autorisé à utiliser les fonctionnalités non documentées, si il existe.)

32voto

Jeroen Wiert Pluimers Points 17529

C'est il y a longtemps comme un caractère d'échappement pour vous permettre d'avoir consts pour les caractères de contrôle dans un moyen plus lisible.

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

Ceci définit un Char constant avec la valeur #3, puis écrit 3 en Borland Pascal 7, et je me souviens de le voir des années avant que trop.

Je viens de vérifier le Turbo Pascal 5.0 et Borland Pascal 7.0 langues guides, mais ne pouvait pas le trouver, il semble donc que sans-papiers.

Edit: Je ne m'en souviens c'était un Borland chose, et juste vérifié: il ne fait pas partie de la norme ISO Pascal standard (anciennement c'était la norme ANSI Pascal Standard, grâce Sertac pour s'en rendre compte).

Il est documenté dans le Free Pascal documentation.

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

Plus Edit: j'ai trouvé, elle a documenté en Delphi en un Mot et le Delphi Bases site.

Trouvé: Viens de le trouver à la page 37 de la Turbo Pascal 3 Manuel de Référence.

--jeroen

3voto

Toon Krijthe Points 36327

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X