2011-02-06 8 views
38

Déjenme explicarlo con un ejemplo. En Delphi, puede escribirDelphi^Una sintaxis: ¿Documentado, implícito o no documentado?

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; 

para comprobar si hay comandos de teclado Ctrl + C y Ctrl + V. De hecho, la misma sintaxis funciona para Ctrl + A, donde A es cualquier carácter y, por supuesto, también puede usar una declaración case en lugar de if s. Incluso puede hacer ShowMessage(^A), por lo que, al parecer, ^A se considera char.

Sin embargo, al navegar por the official Delphi documentation, no puedo encontrar ninguna referencia a esta sintaxis. Pero tal vez la sintaxis ^A es tan común que se entiende como una parte del formato de archivo de texto plano subyacente? ¿O es simplemente una característica no documentada del lenguaje de programación Delphi? (Tenga en cuenta que las construcciones anteriores se utilizan en realidad en el código fuente RTL/VCL. Pero, por supuesto, Embarcadero y Embarcadero solo pueden usar funciones no documentadas, si existe alguna).

+2

cualquiera puede utilizar características no documentadas –

+0

@ David: Bien, estoy de acuerdo en que el problema no es tan malo como en el caso de la API de Windows, por ejemplo. –

+6

Algunos de ellos, la penetración de error no le gusta, como '^ [' (Esc), '^' @ (NUL) .. –

Respuesta

28

Esto es de hace mucho tiempo como un carácter de escape para que pueda tener consts para caracteres de control de una manera más fácil de leer.

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

Esto define una constante con un valor Char #3, a continuación, escribe 3 en Borland Pascal 7, y yo recuerdo haberlo visto años antes de eso también.

acabo de revisar las guías Turbo Pascal 5.0 y Borland Pascal 7.0 idiomas, pero no lo encontró, por lo que parece indocumentados.

Editar: sí recuerdo que esto era una cosa Borland, y justo checked: No es parte de la norma ISO Pascal (antes esto era ANSI Pascal estándar, gracias Sertac para darse cuenta de esto).

Ites documentado en Free Pascal documentation.

SGI utiliza la barra diagonal inversa como carácter de escape, como per their docs.

Más Edición: La encontré documented in Delphi in a Nutshell y la Delphi Basics site.

La encontró: La acaba de encontrar en la página 37 del Turbo Pascal 3 Reference Manual.

--jeroen

+1

No existe un estándar ANSI en el lenguaje pascal desde 1993, cuando ANSI lo rescindió en nombre de la norma ISO. Respecto al estándar ISO, vea mi comentario a la pregunta de Andreas. –

+0

¡Esa es una gran respuesta! ¡Gracias! –

+0

Afaik cuando hubo conversaciones sobre la simplificación del compilador (Delphi) hace unos años, esta característica, junto con cosas como (.) Se usó como ejemplos –

3

Se trata de un conocido indocumentado característica. Pero, de nuevo, la última documentación oficial de la sintaxis es de Delphi 7.

+0

¿Sabes si funciona en Deplhi 7? –

+0

podrías describirlo. ¿Cuál es el tipo de^A? –

+0

@David - Tooltip sth. visión lo muestra como '# 1'. –

Cuestiones relacionadas