![]() |
![]() |
| Volver al índice | Por Luis Roche
|
Ha llegado el momento de pasar a la acción. Vamos a crear nuestro primer componente: TNif. Pero antes de ponernos a escribir código conviene analizar el propósito del componente y cómo lo vamos a implementar.
El propósito del componente es muy simple: a partir de un dato de entrada, el número de DNI, nuestro componente debe calcular la letra del NIF correspondiente. El método de calcular esta letra es mediante una operación matemática muy sencilla. Esta operación es: DNI - ((DNI div 23) * 23). El resultado de esta operación será un número comprendido entre 1 y 23. Mediante una tabla asignaremos una letra determinada a cada número, letra que corresponde al NIF pedido. Los detalles completos de este calculo y asignación de letra se encuentran en el código fuente.
En base a nuestro objetivo, queda claro que nuestro componente será del tipo no visual y, por lo tanto, lo derivaremos a partir de TComponent, que como ya se ha visto; (unidad 2), es la base para la creación de componentes no visuales.
La forma de introducir el número de DNI será mediante una propiedad (propiedad DNI) de lectura y escritura. El valor de dicha propiedad lo almacenaremos en un campo (FDNI) de tipo longInt. Esta propiedad será publicada (published) para que así aparezca en el inspector de objetos. La lectura y escritura de valores en esta propiedad la haremos directamente sobre el campo FDNI, es decir dejaremos que sea el propio inspector de objetos el que se encargue de verificar que el valor introducido corresponde al tipo longInt.Una vez acordado el método de diseño empleado es hora de comenzar a teclear.
unit Nif; { (c)1996 by Luis Roche }
interface
uses
Classes;
type
TNif = class(TComponent) {Nuestro propiedad deriva de TComponent}
private
FDNI : LongInt; {Almacenará el número de DNI}
function GetNIF : char; {Calcula la letra del NIF}
protected
public
property NIF: char read GetNIF; {Propiedad NIF: sólo lectura}
published
property DNI: LongInt read FDNI write FDNI; {DNI: lectura y escritura}
end;
procedure Register; {Registra nuestro componente en la paleta}
implementation
function TNIF.GetNIF : char; {Calcula el NIF a partir del DNI}
Var aux1 : integer;
Const letras : string = 'TRWAGMYFPDXBNJZSQVHLCKE';
begin
aux1:=FDNI - ((FDNI div 23) * 23);
result:=letras[aux1+1];
end;
procedure register; {registro del componente}
begin
registercomponents('curso', [tnif]);
end;
end.
El código fuente se ha creado siguiendo los siguientes pasos:
Utilizamos el experto de componentes para que nos generere la unidad en la que escribiremos nuestro componente. En el cuadro de diálogo que el experto nos muestra, introducimos TNif como Class Name, TComponent como Ancestor Type y Curso como Palette page. Al pulsar sobre OK, el experto de componentes nos crea el esqueleto básico de nuestro componente, incluyendo el procedimiento Register.
De todas las unidades que aparecen en la clausula uses dejamos sólo Classes, ya que no utilizamos ningún procedimiento de las demás.
Declaramos el campo FDNI (longInt) en la sección privada. En este campo, como ya se ha dicho, almacenaremos el DNI. En la sección published escribimos la siguiente línea:
property DNI: LongInt read FDNI write FDNI
De este modo declaramos la propiedad DNI y especificamos que la lectura y escritura de valores en la misma se hace directamente con el campo FDNI utilizando el inspector de objetos.
Declaramos la propiedad NIF de sólo lectura en la parte public. Conviene recordar que las propiedades de sólo lectura deben ir declaradas en la parte pública y no en la publicada. Especificamos que para leer el valor de la propiedad utilizaremos la función GetNIF, la cuál declaramos en la sección privada.
Escribimos la función que cálcula la letra del NIF en la parte de implementación de la unidad.
Guardamos la unidad con el nombre nif.pas. Conviene que todos los componentes que vayamos creando durante el curso los almacenemos en un directorio aparte (p.e delphi\componen)
Cada componente necesita un bitmap para representar al componente en la paleta de componentes. Si no se especifica uno, Delphi utilizará uno por defecto.
El bitmap no se incluye en el código fuente del componente, sino que debe incluirse en un archivo aparte con la extensión .DCR (dynamic component resource). Este fichero puede crearse con el propio editor de imagenes que incorpora Delphi.
El nombre del archivo .DCR debe coincidir con el nombre con que se ha salvado la unidad que contiene el componente. El nombre de la imagen bitmap (que debe estar en mayúsculas) debe coincidir con el nombre del componente. Los dos ficheros (el de la unidad *.pas y el de el bitmap *.dcr) deben residir en el mismo directorio.
En nuestro componente, si hemos salvado la unidad con el nombre nif.pas nuestro archivo de recursos deberá tener el nombre nif.dcr. Dentro de este archivo se encontrará el bitmap, al que pondremos el nombre TNIF. El bitmap que hemos creado es el siguiente:
El tamaño del bitmap debe ser de 24x24 pixels.
Como último detalle, si quieres utilizar este mismo bitmap, puedes utilizar un programa de tratamiento de imágenes para cortarlo y pegarlo en el editor de imágenes de Delphi.
Otros Links de Interés:
Cocina - Videos - Juegos Gratis - Postales cachondas - Cine - Programas Gratis - Letras de Canciones
Listas de todos los Tutoriales Gratis. 1998- 2007 - -
Los
tutoriales y cursos aquí reunidos son una recopilación de los mejores encontrados en
Internet.
El crédito y copyright de los mismos si lo hubiere corresponde al autor de cada
uno de ellos.
Si tu tutorial o curso está aquí, y deseas darlo de baja de esta recopilación o
quieres añadir el tuyo,
envíanos un mensaje desde
aquí