Aula Macedonia


Curso de Programación Visual en Delphi


Artículo realizado por
José Antonio Suárez.





Capítulo 3.
Nuestros primeros pasos con el entorno Delphi


1. Los Proyectos

Vamos por fin a meternos de lleno en la programación propiamente dicha ya que hasta ahora hemos visto lo que rodea a Delphi.

Toda aplicación desarrollada se basa en un proyecto, nombre con que se denomina al conjunto de fichas, módulos del código y cualquier otro elemento que forman parte del programa.

El proyecto que se crea por defecto al iniciar Delphi solo cuenta con una ficha y el módulo de código asociado.

A este proyecto mínimo nosotros podemos ir añadiendo otros elementos.

Cada proyecto Delphi se compone de múltiples archivos, los cuales almacenan la información de cada ficha, el código de cada objeto, los recursos y la propia definición del proyecto.

1.1 Gestión del proyecto.

Para los novatos en este tema, lo mejor que se puede hacer nada más comenzar a aprender un lenguaje, es familiarizarse con el entorno en el que se basa ese lenguaje. El entorno de Delphi es muy sencillo e intuitivo de manejar. Como dijimos en el capítulo anterior, el entorno de Dephi es el IDE, para el desarrollo visual de aplicaciones, en el que la manera de trabajar parte de un formulario o ficha central, en la que se sueltan los distintos componentes hasta llegar a formar nuestro interfaz del programa. A continuación vamos añadiendo el código pertinente para cada uno de esos componentes o controles (que recordemos, son objetos).

No vamos a detenernos en la explicación del manejo de este entorno, ya que sería demasiado tedioso y creo que es una tarea que debe resolver cada uno particularmente, ya que si no se ejercita personalmente, no se puede tener una idea real por mucho que se lea sobre el (lo que suele pasar en las universidades).

Como hemos dicho antes, un proyecto es lo que va a constituir el centro de nuestro programa o aplicación. Podemos pensar que el centro de una aplicación es el formulario que aparece por defecto cada vez que iniciamos un nuevo proyecto. Este formulario va ser el principal que llega a considerarse como el centro de todo. Es en sí mismo un objeto, y cada vez que seleccionemos un componente, por ejemplo un botón, y lo soltemos sobre este formulario (este botón que también es un objeto), va a formar parte de los hijos del formulario.

De esta forma, un formulario será el padre de todos los componentes que estén en su interior. Si por ejemplo nuestra aplicación tiene dos formularios, cada uno será el padre de todos los componentes que tenga en su interior, y para referenciar a un componente que está en otro formulario lo único que hay que hacer es poner el nombre del formulario, un punto y continuación el nombre del componente que deseemos.

Ya hemos dicho que el entorno de Delphi es capaz de generar automáticamente código para nosotros, así que cuando soltemos un botón sobre un formulario, automáticamente se generará el código en el que se diga que ese botón es un objeto heredero de la clase botón. Y esto sucederá con todo lo que hagamos.

1.2 El Código de un Proyecto

Lo mejor es que antes de nada se pase a crear un proyecto en Delphi y se comience a soltar componentes sobre la ficha o formulario principal, y ver cómo automáticamente el código que se va generando se corresponde con lo que vamos haciendo, y todo esto sin que tengamos que escribir una sola línea manualmente.

Pero por supuesto, una aplicación que se precie no va a consistir solamente en un montón de botones, etiquetas y listas desplegables que no van a hacer absolutamente nada, ya que si ejecutamos nuestros maravillosos formularios llenos de todo tipo de controles, no harán absolutamente nada. Así antes de comenzar a poner controles a lo loco lo suyo es pensar en qué es lo que se supone que nuestro programa tiene que hacer y cuál va a ser la mejor forma en que el usuario se puede comunicar con él para que éste haga lo que se desee.

Veamos ahora el código que se genera automáticamente cuando un formulario está recién creado, es decir, cuando aún no hemos hecho nada sobre él.


unit Unit1;
interface

uses
Windows, Messages, SysUtils, Classes, 
Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;

implementation
{$R *.DFM}
end.

 

En la primera línea nos encontramos con la declaración del nombre de la unidad:

unit Unit1;

Este nombre será con el que se grabará el fichero (.PAS).

En este código existen dos partes bien diferenciadas: la parte de "interface" y la de "implementation".

En la primera nos encontramos con la palabra reservada:

uses

que indica las librerías que se utilizan por defecto.

En esta parte tambien se van a incluir la declaración de los tipos de las constantes, de la variables globales… en fin de todo lo que conforman la declaración de los objetos que vamos a utilizar.

Se puede ver tambien la línea en la que se indica que nuestro formulario es un objeto heredado de la clase TForm:

TForm1 = class(TForm)

Supongamos que ahora soltamos un botón sobre el formulario (con soltar me refiero a elegir un botón del interfaz de Delphi, y pulsar sobre el formulario, lo que provoca que aparezca un botón automáticamente sobre éste). El código automáticamente generado es el siguiente:



unit Unit1;
interface
uses  
Windows, Messages, SysUtils, Classes, 
Graphics, Controls, Forms, Dialogs;
type
  TForm1 = class(TForm)
    Button1: TButton;
private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;

implementation
{$R *.DFM}
end.

Y la siguiente línea que se ha añadido:

Button1: TButton;

indica que se ha declarado un objeto llamado Button1 de tipo Tbutton (la clase de los botones).

Podemos ver cómo automáticamente se ha creado un a objeto (una herencia de la clase Botón)

Y como lo mejor es verlo para creerlo, pruebe para verlo por sí mismo, y pruebe también la facilidad con que se añade código para cada uno de los eventos que se pueden producir normalmente en Windows.

 

2. Object Pascal

A continuación vamos a dar un repaso general a las características del lenguage Object Pascal

2.1 Comentarios

Existen tres formas de poner comentarios en Delphi:


	(* Comentario de tipo uno 
	y multilíneas *)

	{ Comentario de tipo dos
	y multilíneas }

	// Comentario de tipo 3 pero de una sola línea

 

2.2 Declaraciones

En Object Pascal a diferencia de lo que ocurre en otros lenguajes como Visual Basic por ejemplo, cualquier variable debe ser declarada antes de utilizarse. Esto, en principio puede parecer algo estricto e incluso incómodo, pero es una gran ventaja, ya que no existe la posibilidad de encontrar un identificador desconocido introduciendo así en el programa un error latente (si el intérprete o el compilador no lo chequean).

Un identificador debe comenzar siempre con una letra seguida de cualquier número de caracteres. Y hay que tener en cuenta que las vocales acentuadas no son válidas, así como la ñ (habrá que aguantarse). Tampoco se permiten los espacios en blanco en el interior de un identificador. No podrán existir dos identificadores iguales a no ser que estén en ámbitos diferentes. De esta forma, los procedimientos diferentes podrán declarar variables con el mismo nombre sin problema alguno (no es absurdo esto puesto que en algunos lenguajes no existe el ámbito de las variables, y una variable es global y visible para todo el mundo, con lo que 2 variables con el mismo nombre no pueden coexistir).

2.3 Tipos

Tanto para declarar una variable como para utilizar un valor constante, es necesario el que conozcamos los diferentes tipos de datos con los que puede trabajar.

Estos tipos nos permitirán trabajar con números de diferentes precisiones, además de caracteres, punteros, etcétera.

A continuación se enumeran los tipos más habituales..

Tipo

Rango

Bytes que ocupa

Byte

[0,255]

1 Byte

ShortInt

[-128.127]

1 Byte

SmallInt

[-32768,32767]

2 Bytes

Word

[0,65535]

2 Bytes

Integer

[-65536,65535]

4 Bytes

LongInt

[-2147483648,214748367]

4 Bytes

Cardinal

[0,2147483647]

4 Bytes

Boolean

{True,False}

1 Byte

ByteBool

{True,False}

1 Byte

WordBool

{True,False}

2 Bytes

LongBool

{True,False}

4 Bytes

Real

[2.9 x 10-39 , 1.7 x 1038]

6 Bytes

Single

[1.5 x 10-45 , 3.4 x 1038]

4 Bytes

Double

[5.0 x 10-324 , 1.7 x 10308]

8 Bytes

Extended

[3.4 x 10-4932 , 1.1 x 104932]

10 Bytes

Comp

[-263+1 , 263 -1]

8 Bytes

Currency

[-922337203685477.5808 , 922337203685477.5807]

8 Bytes

String

ASCII

1 Byte - 4 GBytes

Hay otros más, pero estos son los más importantes.

La forma de utilizarlos es mediante la palabra reservada: var


	
	var contador, auxiliar:Integer;
	      cadena:String[7500];
	      vector:Array [1..50] of Word;

Otra de las cosas fundamentales son los registros, conjuntos, matrices…

Veamos unos ejemplos de declaraciones:


	type TDiaSemana = (Lunes,Martes,Miercoles,
                              Jueves,Viernes,Sabado,
                              Domingo)
	         TMiRegistro = Record	
				Nombre:String;
				Direccion:String;	
				Edad:Byte;
			end;
	var Matriz: Array [1..25] [0-35] of Single;
	      Jose:TMiRegistro;
	      Conjunto:TDiaSemana;	

 

2.4 Estructuras de Control

Las estructuras de control son las típicas que existen en cualquier lenguaje de programación:

Condicional


	if Delphi>C then
	   begin
         ShowMessage('Estás en lo cierto);
         MessageBeep(0);	
	end
	else
	begin
	         ShowMessage('Esto nunca sucederá');
	         MessageBeep(1);
	end;

Decisión Múltiple


	case numero of
	         1: begin
		ShowMessage('El número es el 1');
		MessageBeep(numero);
	        end;
	        2: begin
		ShowMessage('El número es el 1');
		MessageBeep(numero);
	        end;	
	end;
Bucle For

	for contador:=1 to 25 do
	begin
	        ShowMessage('Hola Mundo');
    	        MessageBeep(contador);
	end;

Bucle While


	contador:=1;
	while contador<25 do
	begin
	        ShowMessage('Hola Mundo');
    	        MessageBeep(contador);
	        Inc(contador);
	end;

Bucle Repeat


	contador:=1;
	repeat
	        ShowMessage('Hola Mundo');
    	        MessageBeep(contador);
	        Inc(contador);
	until contador>25;

2.5 Funciones y Procedimientos

La diferencia entre uno y otro tipo es que las funciones devuelven un valor y los procedimientos no. Pero esto prácticamente ya lo sabe todo el mundo.

Tambien es posible la diferenciación del paso de parámetros por valor o por referencia.

Veamos unos ejemplos:


	procedure MuestraMensaje(mensaje:String[25]);
	begin
	         ShowMessage(mensaje);
	end;

function IntercambiarYSumar(var x,y:Integer):Integer; var auxiliar:Integer; begin auxiliar:=x; x:=y; y:=auxiliar; Result:=x+y; end;

Pues hasta aquí el repaso al lenguaje Object Pascal.

No ha pretendido ser exhaustivo, sino una introducción a él para que sea el propio lector el que profundice por su cuenta.

Ya sabemos más o menos la sintaxis, y podemos comenzar a hacer nuestros primeros pinitos.

Así que lo que queda por decir en este capítulo es que traten de hacer el primer programa por excelencia que es obligatorio cada vez que se aprende un lenguaje. Este programa es el : ¡HOLA MUNDO!

Que cada uno lo haga a su forma, con los componentes que sean, pero que practiquen con todo.

Cuelgues Mentales.

Otra contribución a la informática desde Internet de un Ex-Supervisor de ventas de una tienda de informática. (Dice que es un caso real).

Yo solía trabajar en una tienda de informática, en la sección de software y un día un caballero llamó con un problema sobre una fuente de alimentación que echaba humo.

El servicio de respuesta al cliente se encontró con un problema al intentar convencer al señor de que tenía un problema de hardware, no de software

Servicio: Señor, algo está cortocicuitado en su fuente de alimentación y provoca el humo.

Cliente: Apuesto a que hay un comando que si lo pongo en el Autoexec.bat lo solucionará.

Servicio: No hay nada que el software pueda hacer para ayudarle a resolver ese problema.

Cliente: Sé que hay algo que puedo poner… algún comando, quizás una orden… quizás sea poniéndolo en el Config.sys

Después de unos cuantos minutos de réplicas y contrarréplicas…

Servicio: ¡De acuerdo!. Se supone que no puedo revelarle esto, pero hay un comando oculto en algunas versiones del MS-DOS que puede utilizar. Quiero que edite su Autoexec.bat y añada en la última línea lo siguiente: C:/DOS/NOSMOKE y luego reinicie su ordenador.

El cliente así lo hace.

Cliente: ¡Todavía humea!

Servicio: Entonces debe dirigirse a Microsoft. Llámelos y pregunte por un patch para NOSMOKE.EXE.

El cliente colgó. Pensábamos que ya no íbamos a saber nada más que él. No fue algo muy profesional por nuestra parte, pero no podíamos perder nuestro precioso tiempo con tonterías como esta… pero resultó al final que cuatro horas más tarde llamó.

Servicio: Buenas señor, ¿como está su ordenador?

Cliente: Llamé a Microsoft y me dijeron que mi fuente de alimentación era incompatible con su NOSMOKE.EXE, y que lo que tengo que hacer es conseguir una nueva. Me gustaría saber si puedo sustiturirla por una nueva, y cuánto me costaría…

Y yo me pregunto, ¿qué diablos le dirían en Microsoft para convencerlo de lo que en un principio no quería?





AULA MACEDONIA
a
MACEDONIA Magazine