Editor de Textos.

Me imagino que todos conocereis el Bloc de Notas (Notepad), que viene con Windows. Es un pequeño editor de textos en formato Ascii, no es una gran maravilla, pero se usa.
Con Delphi podemos contruir un programa de características similares, y con un mínimo esfuerzo. Inicia el Delphi, y sobre el formulario situa un el compenente Memo que está en la paleta Standar, y es el quinto empezando por la izquierda. Ponlo sobre el formulario donde más te guste, y cambia la propiedad Aling del componente Memo (de ahora en adelante Memo), al valor alClient. Con esto lo que consigues es que ocupe todo el interior del formulario. Pues si te digo que ejecutes el programa y que la mitad editor esta hecho, no me creerás, pero hazlo. Para tu asombro la ventana que aparece contiene una area donde se puede escribir, borrar, insertar texto, e incluso (en windows 95) si pulsas el botón derecho verás que surge un menu contextual, con opciones de copiar, pegar, etc. totalmente operativo. La única pega, por poner algo, es que aparece con un texto que pone Memo. Este texto lo pone por defecto el componente cuando es colocado sobre un formulario. Lo puedes borrar, esta contenido en la propiedad Lines, que es del tipo TString, pulsa sobre la propiedad y veras que sale una ventana donde esta escrita la palabra memo. Si quieres que aparezca un texto al arrancar tu aplicación, pues lo pones ahi. En este caso, pues lo normal es que no aparezca nada, así que borra la palabra Memo. Te anticipo que la propiedad Lines contiene, en tiempo de ejecución, el texto que hay en componente (¿todo?, si todo el texto, Delphi es así), así como información sobre él.

Ahora no estaria mal que puediera cargar un fichero. Es muy fácil, si tenemos encuenta que la propiedad lines contiene el texto, pues abrimos un fichero y leemos las líneas y las ponemos en la propiedad Lines. Pues eso haremos, o mejor le decimos al Delphi que lo haga por nosotros. Así que para cargar un fichero (eso sí, ha de ser ascii), ponemos Memo1.Lines.LoadFromFile (Fichero), por ejemplo añade esta línea al evento OnCreate del Formulario:
Memo1.Lines.LoadFromFile ('c:\autoexec.bat');
Con esta línea lo que conseguimos es que se cargue el fichero autoexec.bat, que debería estar en el directorio raíz de tu ordenador. Sino encuentra el fichero se produce una excepción, la cual podemos controlar con con Try Except, como explique en otro capitulo.

El método que carga de un fichero en muy sencillo, como se puede ver. Para grabar un fichero es igual de sencillo, debes poner: Memo1.Lines.SaveToFile (Fichero);

Lo interesante sería mostrar un cuadro de dialogo estandar de windows, para cargar un fichero y para grabarlo. Para hacer esto se puede hacer uso de los cuadros que Delphi pone a nuestra disposición. En la paleta Dialogs, escoge el primer y segundo componente por la izquierda, que son los cuadros para abrir y cerrar ficheros respectivamente. Antes de nada pon un menú llamado Archivo con dos subopciones, una sera Abrir y la otra Guardar.

Voy a explicar el cuadro para Abrir Fichero (OpenDialog), en lo que respecta al cuadro Guardar (SaveDialog) es lo mismo. La primera propiedad interesante en DefaultExt, la cual contendrá la extensión por defecto que se le añadirá al nombre de archivo que teclee el usuario, si este no introduce extensión alguna. Si pones alguna extensión pon la sin el punto (por ejemplo: txt), yo personalmente no la pondria en este caso.

La siguiente propiedad es FileName donde podemos poner el nombre del fichero que queremos que aparezca por defecto en el cuadro. En tiempo de ejecución contiene el nombre del fichero con la ruta completa del fichero abierto (lo usaremos más adelante).

Cuadro de FiltrosLa propiedad Filter es muy interesante, porque contiene todos la lista de tipos de archivos despliegable de este tipo de cuadros. Para introducir la lista pulsa, pulsa el botón que hay en esta propiedad. Se despliega un cuadro como el de la imagen que hay a la derecha de este texto. Es muy fácil de usar, a la izquierda el nombre del filtro, y la derecha el filtro. La imagen adjunta muestra los filtros que puse para este programa.

Después está FilterIndex determina cual de los filtros es usado por defecto, lo normal es no tocar esta propiedad, aunque es tiempo de ejecución la puedes variar para mostrar un filtro u otro.

InitialDir, especifica que directorio por defecto se muestra por defecto al abrirse el cuadro, sino no existe o no ponemos nada se muestra el directorio donde se esta ejecutando el programa.

La propiedad Options tiene un montón de subopciones todas ellas en falso por defecto. Para que adaptarlo a nuestras intenciones debemos hacer un par de retoques.
ofPathMustExist = True
ofFileMustExist = True
Con esto evitamos que el usuario introduzca un fichero o ruta que no exista
ofNoNetworkButton Si pones esta opción en verdadero, no podrás acceder a ficheros que esten en una red, ya que desactiva el botón de red. Yo lo suelo dejar, lo comento porque me pareció interesante.

Por último esta al propiedad Title, que es donde podemos poner el titulo del cuadro, por ejemplo: Abrir Ficheros.

Pues ya solo que lo más fácil, que es un poco de código. En los manejador Onclik de los menús Abrir y Cerrar situa estas líneas de código:
procedure TForm1.Abrir1Click(Sender: TObject);
begin
If OpenDialog1.Execute Then
Memo1.Lines.LoadFromFile (OpenDialog1.Filename);
end;

procedure TForm1.Guardar1Click(Sender: TObject);
begin
If SaveDialog1.Execute Then
Memo1.Lines.SaveToFile (SaveDialog1.Filename);
end;
El funcionamiento es muy sencillo. La primera línea (la que tiene el if) executa el dialogo, si el usuario realiza una acción, que no sea pulsar Cancel, pués la línea vale True, y se entra dentro del If. La propiedad Filename de los cuadros contiene el nombre del fichero, así que se lo pasamos al Memo1.

Bueno, esto es todo, el próximo día continuaré con el editor.