Los lenguajes informáticos se han desarrollado desde el lenguaje de máquina hasta el lenguaje de alto nivel, desde lo complejo hasta lo simple (de hecho, no es simple), lo que refleja el desarrollo de la informática y la tecnología. Cuanto más avanzado es un lenguaje informático, más abstracto y humano es, menos tiene que ver con hardware de bajo nivel y más cómodo de usar. Pero no importa cuán avanzado sea el lenguaje informático, es una abstracción de la capa del sistema operativo, por lo que siempre podemos descubrir las reglas detrás de la comprensión de los lenguajes de alto nivel, es decir: los códigos escritos en lenguajes de alto nivel son solo para describir las necesidades de las personas, y estos códigos deben pasar " Translator "lo traduce al lenguaje de máquina para que pueda ser reconocido y ejecutado por la computadora. Hay dos métodos de traducción: uno es el método de compilación, en el que el compilador genera el código en lenguaje de máquina de antemano y luego el sistema operativo lo programa y ejecuta, como el lenguaje Delphi, el lenguaje C ++, etc. el otro es el método de interpretación, que es una ventaja en el cálculo y la interpretación y la ejecución no afectan el programa de destino, como el lenguaje básico, el lenguaje de secuencias de comandos, etc. Las características del método de interpretación son una velocidad de ejecución lenta y requisitos relativamente altos de hardware informático.
Los lenguajes informáticos definen reglas que describen las necesidades de las personas. Detrás del lenguaje hay un compilador o intérprete. El trabajo principal de un compilador o intérprete es traducir código y convertirse en el principal canal de comunicación entre humanos y computadoras. De esta manera, cuando el sistema operativo permanece sin cambios, varias herramientas de desarrollo muestran sus capacidades únicas, pero al final deben generar código ejecutable por computadora. Por lo tanto, no importa en qué lenguaje informático esté escrito un programa, si es bueno o malo depende en gran medida del compilador o intérprete de ese lenguaje. El compilador de Delphi sigue siendo el compilador más avanzado, mejor y más eficiente del mundo.
Desde la perspectiva de las características de los lenguajes de alto nivel, son básicamente encapsulaciones de las interfaces de servicio proporcionadas por el sistema operativo y, sobre esta base, agregan sus propias características del lenguaje, como programación orientada a objetos, punteros, modos de administración de memoria, etc.
Desde toda la arquitectura del lenguaje Delphi, cuando escribimos programas, usamos VCL directamente, llamamos a la API proporcionada por el sistema operativo, usamos servicios Com o usamos directamente el lenguaje ensamblador para completar nuestro trabajo.
El núcleo y lo mejor de Delphi es la biblioteca de componentes visuales (VCL - Visual Component Library) y la biblioteca de componentes multiplataforma (CLX - aComponent Library for Cross-Platform), que son similares a Microsoft MFC, pero su arquitectura es al menos dos o tres años más avanzado que MFC Tres generaciones. Al programar en Delphi, puede elegir VCL o no empezar desde cero. Supongamos que escribe un programa que crea una ventana y muestra "Hola mundo". Si no usa VCL, debe comenzar llamando a CreateWindow de la API. Esto es algo muy problemático, pero depende de sus requisitos. Esto simplemente demuestra que no es imposible utilizar la programación Delphi sin VCL, como los programas de consola.
VCL es una poderosa biblioteca de clases, que es la esencia y cristalización de las características orientadas a objetos del lenguaje Delphi. La estructura del diagrama de clases es la siguiente:
Esta es una estructura de diagrama de clases abreviada, pero es muy representativa. En el diagrama de clases, podemos ver que VCL tiene solo una raíz: TObjct, y cada una de sus clases derivadas tiene solo un antepasado. Esta es la característica orientada a objetos del lenguaje Delphi. El ancestro más original de todas las clases es TObjcet, y el método de herencia es herencia única. Lo que hay que explicar es:
l Aunque el diseño de VCL es clásico y enorme, no se deje intimidar por esto. Para decirlo claramente, es una biblioteca de clases. Es una biblioteca de clases en la que se combinan muchas clases relacionadas para completar ciertas funciones. Estas clases encapsulan las API de Windows, llaman a los servicios COM de Windows o usan el ensamblaje para operar directamente. Como mencionamos antes, podemos escribir programas con o sin VCL, lo que significa que VCL no es necesario. Si es necesario, podemos heredar y ampliar cualquiera de las clases para convertirla en una clase que cumpla con nuestros propios requisitos. Por ejemplo, si queremos extender la clase TPanal, los eventos correspondientes (OnMouseEnter/OnMouseLeave) se pueden activar cuando el mouse entra y sale, como la función del panel QQ.
u Cree una nueva unidad desde [Archivo]->[Nuevo]->[Unidad].
u Escriba el código de la siguiente manera y luego guarde la unidad como MyPanelUnit.
unidad MiPanelUnidad;
interfaz
utiliza Clases, ExtCtrls, Mensajes, Controles;
tipo
TMouseActionEvent = Procedimiento(Remitente: TObject) del objeto;
TMiPanel = clase(TPanel)
privado
FOnMouseEntrar, FOnMouseSalir:
FouseActionEvent;
//Interceptar mensaje de entrada del mouse
procedimiento WMMouseEnter (var Mensaje:
TMensaje); mensaje CM_MOUSEENTER;
//Interceptamos el mensaje de movimiento del mouse
procedimiento WMMouseLeave (var Mensaje:
TMensaje); mensaje CM_MOUSELEAVE;
publicado
propiedad OnMouseEnter: TMouseActionEvent leído
FOnMouseEnter escribe FOnMouseEnter;
propiedad OnMouseLeave: TMouseActionEvent leído
FOnMouseLeave escribe FOnMouseLeave;
fin;
// Tenga en cuenta que la "R" en "Registro" debe estar en mayúscula. Este es el único lugar en el lenguaje Delphi que requiere atención al tamaño.
Registro de trámites;
implementación
{TMyPanel}
Registro de trámites;
comenzar
//Registra el componente en el IDE de Delphi y lo muestra en el panel "MyControl"
RegisterComponents('MiControl', [TMyPanel]);
fin;
procedimiento TMyPanel.WMMouseEnter(var Mensaje: TMessage);
comenzar
// Determinar si hay código cuando ingresa el mouse y si se ejecuta
si está asignado (FOnMouseEnter) entonces
FOnMouseEnter(Self);
fin;
procedimiento TMyPanel.WMMouseLeave(var Mensaje: TMessage);
comenzar
// Determinar si hay código cuando ingresa el mouse y si se ejecuta
si está asignado (FOnMouseLeave) entonces
FOnMouseLeave(Self);
fin;
fin.
u Luego haga clic en [Componente]->[Instalar componente…], como se muestra a continuación:
Seleccione la unidad que acabamos de crear, MyPanelUnit.pas, en "Nombre de archivo de unidad" y deje otras opciones por defecto. Luego haga clic en "Aceptar", seleccione "Sí" en "El paquete dclusr.bpk se compilará y luego se instalará. ¿Continuar?" y guárdelo después de la compilación e instalación. De esta manera, el control TmyPanel se instalará en Delphi. Desplácese por el panel de control de Delphi hasta el final y verá la página de control MyControl como se muestra a continuación:
u Luego cree un nuevo proyecto, haga clic en [Archivo]->[Nuevo]->[aplicación], arrastre MyPanel desde la página MyControl al Formulario, presione la tecla F11 y cambie a la página Eventos, de la siguiente manera:
Compárelo con TPanel para ver si hay más eventos OnMouseEnter y OnMouseLeave. Haga doble clic en OnMouseEnter y escriba el código de la siguiente manera:
procedimiento TForm1.MyPanel1MouseEnter(Remitente: TObject);
comenzar
ShowMessage('El mouse ingresa a MyPanel1');
fin;
Luego presione F9 para ejecutar, mueva el mouse a MyPanel1 y vea el resultado.
Es así de simple. Ampliamos TPanel para que tenga la capacidad de manejar eventos de entrada y eliminación del mouse, por lo que VCL no es un misterio. Cualquiera puede reescribir los componentes (clases) internos para convertirlos en lo que quieran.
l Delphi admite la herencia de interfaces, que en cierto sentido implementa la herencia múltiple. Por ejemplo, TComponent se define de la siguiente manera:
TComponent = clase(TPersistent, IInterface,
IInterfaceComponentReference)
l No cree instancias de clases abstractas. Siempre que un método en una clase sea un método abstracto, entonces la clase es una clase abstracta. Por ejemplo, TStrings se define de la siguiente manera:
TStream = clase(TOobjeto)
privado
…
protegido
…
público
función Leer (var Buffer; Contar: Entero largo): Entero largo virtual;
función Escritura (búfer constante; Conteo: Entero largo): Entero largo;
…
fin;
Siempre que haya una palabra clave abstracta en la definición de un método, es un método abstracto. No tiene sentido utilizar una clase abstracta para crear una instancia, porque la lectura y la escritura no están implementadas y aparecerá un ejemplo si se llama.
(Sin terminar, consulte Detrás de escena de Delphi --- Referencia para principiantes, Parte 2 (2))
(Si necesita reimprimir, indique la fuente y el autor http://haitian.myrice.com)