La tecnología de base de datos y el diseño de clases de la aplicación ya fueron descriptos en los apéndices anteriores. Aquí se detallarán brevemente las clases del VCL de Delphi para construir la interface y la aplicación propiamente dicha.
El Object Pascal, un conjunto de extensiones de Pascal orientadas a objetos, es el lenguaje de Delphi. El Visual Component Library (VCL) es una jerarquía de clases escritas en Object Pascal y ligadas al IDE de Delphi, que permite desarrollar aplicaciones rápidamente. Usando la paleta de componentes y el Object Inspector de Delphi, es posible distribuir los componentes de VCL en los formularios y manipular sus propiedades sin escribir código.
Todos los objetos de VCL descienden de TObject, una clase abstracta cuyos métodos encapsulan el comportamiento fundamental, tales como la construcción, destrucción, y manejo de mensajes. TObject es el antepasado inmediato de muchas clases simples.
Los componentes en el VCL descienden de la clase abstracta TComponent. Los componentes son objetos que se pueden manipular en los formularios en tiempo de diseño. Los visuales, tales como TForm y TSpeedButton que aparecen en pantalla en tiempo de ejecución son llamados controles, y descienden de TControl.
A pesar de su nombre, el VCL consiste principalmente de objetos no-visuales. El IDE de Delphi permite agregar muchos componentes no-visuales a los programas arrastrándolos sobre los formularios. Por ejemplo, si se estuviera escribiendo una aplicación que se conecta a una base de datos, se podría poner un componente TDataSource en un formulario. Aunque TDataSource es no-visual, se representa en el formulario por un icono (qué no aparece en la ejecución). Se pueden manipular las propiedades y los eventos de TDataSource en el Object Inspector de la misma manera que con un componente visual.
Los componentes gráficos del VCL encapsulan la Interface de Dispositivos Gráficos de Windows (GDI). Para dibujar gráficos en una aplicación de Delphi, se utiliza el canvas de un objeto, en lugar de directamente el objeto. El canvas es una propiedad del objeto, y es también un objeto. Una ventaja principal del canvas es que se ocupa eficazmente de los recursos y cuida del contexto de dispositivos, para que los programas puedan usar los mismos métodos sin tener en cuenta si se está utilizando la pantalla, impresora, bitmaps o metafiles. Los canvas sólo están disponibles en tiempo de ejecución, lo que significa que la única manera de manipularlos es escribiendo código.
Nota: Dado que TCanvas es un wrapper administrador de recursos del GDI, también se pueden usar todas las funciones de GDI sobre el canvas. La propiedad Handle del canvas es el Handle del contexto de dispositivos.
La forma en que las imágenes gráficas aparecen en una aplicación depende del tipo de objeto sobre cuyo canvas se dibuja. Si se está dibujando directamente en el canvas de un control, el gráfico se muestra inmediatamente. Sin embargo, si se dibuja sobre una imagen “offscreen” como un canvas de un TBitmap, la imagen no se muestra hasta que un control copia desde el bitmap hacia el canvas del control. Es decir, cuando se dibuja sobre bitmaps y se los asigna a la imagen de un control, la imagen sólo aparece cuando el control tiene una oportunidad de procesar su mensaje OnPaint.
Cuando se trabaja con gráficos, es frecuente encontrarse con los términos “pintar” y “dibujar”:
“Dibujar” es la creación de un simple y específico elemento gráfico, como una línea o una forma, mediante código. En el código, se dice a un objeto que dibuje un gráfico en un lugar específico de su canvas llamando a un método de dibujo del canvas.
“Pintar” es la creación de la apariencia entera de un objeto. Normalmente “pintar” involucra “dibujar”. Es decir, en respuesta a los eventos OnPaint, un objeto dibuja generalmente algunos gráficos. Por ejemplo, un Edit Box se “pinta” a sí mismo dibujando un rectángulo y colocando algún texto dentro. Por otro lado, un shape se pinta a sí mismo dibujando un simple gráfico.
Con el fin de mostrar un objeto del tipo TImagen descripto en el apéndice B, se utilizó el componente TImage del VCL que se utiliza para visualizar una imagen gráfica en un formulario. Un objeto de tipo TPicture se utiliza para especificar el bitmap real, icono, metafile, u otro objeto gráfico mostrado por TImage. La clase TImage introduce varias propiedades para determinar cómo la imagen se muestra dentro de los límites del objeto de TImage.
En ciertas ocasiones se hizo necesario representar ciertos gráficos o indicaciones sobre las imágenes, esto se realizó utilizando el canvas de TImage, en cambio cuando se debe modificar el bitmap propiamente dicho, se hizo uso del canvas de TImagen.
Entre las propiedades y métodos de TCanvas utilizados en la aplicación, se pueden mencionar: CopyRect, Draw, FillRect, LineTo, MoveTo, Rectangle, RoundRect, ScanLine, Pixels, etc.
La utilización de los componentes del VCL garantiza la eficiencia en la administración de recursos del GDI, pero pueden resultar un poco lentos para tareas de uso intensivo del procesador. En estos casos se debe priorizar la velocidad haciendo uso directamente de las funciones del API de Windows, un ejemplo de esto es la propiedad Pixels de TCanvas que contiene los valores de colores de todos los pixeles del canvas. Se puede utilizar esta propiedad para obtener el valor de gris de un píxel, pero es más eficiente el uso de la función GetPixel(hdc,x,y) del API aunque se debe administrar manualmente el handle hdc.
Además del manejo de imágenes que es esencial en una aplicación de este tipo, también se hizo uso de otros componentes destinados a varias tareas como por ejemplo, diseño de la interface de usuario, manejo de bases de datos, creación de reportes y archivos de log, ayuda integrada en html, operatividad interna de la aplicación, etc.
Sin mencionar los componentes utilizados para la interface se encuentran: TAction, TTable, TDataSource, TQuery, TQuickReport, TChart, TWebBrowser, TWordApplication.