Para crear un procesador de textos vamos a utilizar el componente
RichEdit que se encuentra en la pestaña
Win32. Este componente tiene la particularidad de poder definir distintos estilos de texto al contrario de un componente
Memo cuya fuente es estática para todo el documento.
El componente de la clase
TRichEdit hereda de
TCustomMemo añadiendo características tan interesantes como la de modificar el estilo de la fuente, colorear palabras o frases, etc.
Veamos como se podría crear un mini procesador de textos utilizando este componente. Como procesador de textos lo primero que debemos definir son las funciones para la creación, carga y grabación de documentos en disco.
La programación la voy a realizar sobre este formulario:

Las opciones del menú son:
Archivo -> Nuevo, Abrir, Guardar, Guardar como y Salir.
Edición -> Cortar, Copiar y Pegar.
Formato -> Fuente
Ayuda -> Acerca de...
GUARDANDO EL TEXTO EN UN ARCHIVOLo primero que vamos a contemplar es la grabación en un archivo de texto. Para ello vamos a insertar en el formulario un componente de clase
TSaveDialog que se encuentra en la pestaña
Dialogs y lo vamos a llamar
GuadarTexto.
Entonces al pulsar la opción
Archivo -> Guardar como del ménu ejecutamos lo siguiente:
procedure TFormulario.GuardarComoClick( Sender: TObject );
begin
if GuardarTexto.Execute then
begin
RichEdit.Lines.SaveToFile( GuardarTexto.FileName );
sArchivo := GuardarTexto.FileName;
end;
end;
La variable
sArchivo se va a encargar de guardar la ruta y el nombre archivo que se guardó por primera vez, para que cuando seleccionemos la opción guardar no haya que volver a decirle de nuevo el nombre. Esta variable la vamos a declarar en la sección privada de nuestro formulario:
private
{ Private declarations }
sArchivo: String;
Ahora tenemos que hacer que si el usuario pulsa la opción
Guardar se guarde el archivo sin preguntarnos el nombre si ya lo tiene:
procedure TFormulario.GuardarClick( Sender: TObject );
begin
// ¿No tiene nombre?
if sArchivo = '' then
GuardarComoClick( Self )
else
RichEdit.Lines.SaveToFile( sArchivo );
end;
Si no tuviera nombre es que es un archivo nuevo, con lo cual lo desviamos a la opción
Guardar como.
CARGADO EL TEXTO DESDE UN ARCHIVOPara cargar el texto tenemos que añadir al formulario el componente
TOpenDialog y lo llamamos
CargarTexto. Y al pulsar en el menú la opción
Archivo -> Abrir se ejecutaría:
procedure TFormulario.AbrirClick( Sender: TObject );
begin
if CargarTexto.Execute then
begin
RichEdit.Lines.LoadFromFile( CargarTexto.FileName );
sArchivo := CargarTexto.FileName;
end;
end;
También guardamos en la variable
sArchivo el nombre del archivo cargado para su posterior utilización en la opción
Guardar.
CREANDO UN NUEVO TEXTOEn nuestro programa vamos a hacer que si el usuario selecciona la opción del menú
Archivo -> Nuevo se elimine el texto del componente
RichEdit. Lo que si hay que controlar es que si había un texto anterior le pregunte al usuario si desea guardarlo.
procedure TFormulario.NuevoClick( Sender: TObject );
begin
// ¿Hay algo introducido?
if RichEdit.Text <> '' then
if Application.MessageBox( '¿Desea guardar el texto actual?', 'Atención',
MB_ICONQUESTION OR MB_YESNO ) = ID_YES then
GuardarClick( Self );
RichEdit.Clear;
end;
CONTROLANDO LA EDICION DEL TEXTOOtra de las cosas básicas que debe llevar todo editor de texto son las funciones de cortar, copiar y pegar. Para ello vamos a implemantar primero la opción del menú
Edición -> Cortar:
procedure TFormulario.CortarClick( Sender: TObject );
begin
RichEdit.CutToClipboard;
end;
Después hacemos la opción de
Edición -> Copiar:
procedure TFormulario.CopiarClick( Sender: TObject );
begin
RichEdit.CopyToClipboard;
end;
Y por último la opción de
Edición -> Pegar:
procedure TFormulario.PegarClick( Sender: TObject );
begin
RichEdit.PasteFromClipboard;
end;
CAMBIANDO EL ESTILO DEL TEXTOUna vez tenemos implementada la parte básica del editor de texto vamos a darle la posibilidad al usuario de que pueda cambiar la fuente, el estilo, el color, etc.
Para que el usuario pueda elegir la fuente tenemos que introducir en el formulario el componente de la clase
TFontDialog situado en la pestaña
Dialogs. Le vamos a dar el nombre de
ElegirFuente.
Ahora en la opción del menú
Formato -> Fuente ejecutamos:
procedure TFormulario.FuenteClick( Sender: TObject );
begin
if ElegirFuente.Execute then
with RichEdit, ElegirFuente do
begin
SelAttributes.Name := Font.Name;
SelAttributes.Size := Font.Size;
SelAttributes.Color := Font.Color;
SelAttributes.Pitch := Font.Pitch;
SelAttributes.Style := Font.Style;
SelAttributes.Height := Font.Height;
end;
end;
¿Por qué no hemos hecho lo siguiente?
RichEdit.Font := ElegirFuente.Font;
Si hago esto me cambia la fuente de todo el texto, incluso la que he escrito anteriormente y a mi lo que me interesa es modificar la fuente de lo que se vaya a escribir a partir de ahora. Para ello se utilizan las propiedades de
SelAttributes las cuales se encargan de establecer el estilo del texto seleccionado, y en el caso de que no haya texto seleccionado se aplica a donde esté el cursor.
En el próximo artículo seguiremos ampliando nuestro pequeño procesador de textos.
Pruebas realizadas en Delphi 7.