Para animar un poco mas este hilo, dejo esta funcion (las primeras lineas
sirven para probarla)
El autor figura en la descripcion de la funcion.
* Ejemplo de justificación de texto
***********************************
CLEAR
cTexto = 'Permite la edición de archivos de texto y programas. '+;
'Si ha seleccionado "Modificar el archivo seleccionado" en la ficha
Proyectos '+;
'del cuadro de diálogo Opciones, la ventana de edición se abre '+;
'cuando haga doble clic sobre un archivo de texto o de programa en el
administrador '+;
'de proyectos. '+CHR(13)+;
' En la ventana de edición puede: '+;
' Trasladar texto hacia la ventana Comandos o hacia otras ventanas de
edición.'+;
' Seleccione el texto a trasladar y arrástrelo al lugar de destino. '+;
' Para establecer las preferencias de edición, vea la ficha Editar del
cuadro'+;
' de diálogo Opciones. '+;
' Copiar texto a la ventana Comandos o a otras ventanas de edición. '+;
' Seleccione el texto a copiar, mantenga presionada la tecla CTRL y
arrástrelo'+;
' al lugar de destino. '+;
' Cambiar la fuente, el interlineado y el sangrado, seleccionando el
comando '+;
' apropiado en el menú Formato. Esto es todo. No hay nada más que decir.
'+;
' Fin de las pruebas de justificación. '
nAncho = 30
* Fija una fuente no proporcional
*********************************
_SCREEN.FONTNAME = [Courier New]
? JustificarTexto(cTexto,nAncho) && FUNCTION [V120]
return
*-------------------------------------------------------
* Función.....: JustificarTexto(cTexto,nAncho)
*
* Descripción.: Devuelve una cadena justificada a ambos
* margenes
*
* Parámetros..: cTexto - Variable o campo memo a
* justificar
* nAncho - Ancho de línea
*
* Devuelve....: Caracter
*
* Notas.......: 16/01/1997 17:16:29 Pedro Hernández
*-------------------------------------------------------
FUNCTION JustificarTexto(cTexto,nAncho)
* Declaración de variables
**************************
LOCAL nLinea, cLinea, nPalabras,i,cPalabra,cResultado
* Inicialización de variables
*****************************
nLinea = 0
STORE [] TO cLinea,cResultado
* Apertura de librerias
***********************
SET LIBRARY TO FOXTOOLS
* Contamos el número de palabras
* Se asumen como separadores de palabras
* los espacios y el tabulador
****************************************
nPalabras = Words(cTexto)
* Bucle de composición
**********************
FOR i = 1 TO nPalabras
cPalabra = WordNum(cTexto,i)
* Comprobamos que la longitud
* de la palabra actual mas la longitud
* acumulada de la linea no sobrepase
* el ancho de linea determinado por
* el parámetro nLinea
**************************************
IF LEN(cLinea)+LEN(cPalabra) > nAncho ;
OR cPalabra = CHR(13)
cLinea = JustificarLinea(cLinea,nAncho)
cResultado = cResultado + cLinea + IIF(cPalabra=CHR(13),[],CHR(13))
cLinea = []
ENDIF
cLinea = cLinea + cPalabra + [ ]
NEXT
cLinea = JustificarLinea(cLinea,nAncho)
cResultado = cResultado + cLinea + CHR(13)
RETURN cResultado
*-------------------------------------------------------
* Función.....: JustificarLinea(cTexto,nAncho)
*
* Descripción.: Devuelve una cadena justificada a ambos
* margenes. Se llama a esta función desde
* JustificarTexto, para ajustar cada una
* de las líneas que va procesando
*
* Parámetros..: cTexto - Variable o campo memo a
* justificar
* nAncho - Ancho de línea
*
* Devuelve....: Caracter
*
* Notas.......: 16/01/1997 17:16:29 Pedro Hernández
*-------------------------------------------------------
FUNCTION JustificarLinea(cTexto,nAncho)
* Declaración de variables
**************************
LOCAL nPalabras, nCaracteres, nEspacios, nAñadir, nIntEspacios,
nModEspacios, i
* Inicialización de variables
*****************************
nPalabras = Words(cTexto)
cTexto = ALLTRIM(cTexto)
nCaracteres = LEN(cTexto)
nEspacios = OCCURS([ ],cTexto)
nAñadir = nAncho - nCaracteres
nIntEspacios = INT( nAñadir / nEspacios )
nModEspacios = IIF(nEspacios = 0,0,MOD( nAñadir , nEspacios ))
cEspacios = SPACE(nIntEspacios+1)
* cEspacios = replicate([·],nIntEspacios+1)
cFinal = RIGHT(cTexto,1)
IF cFinal = [.] OR cFinal = CHR(13)
RETURN cTexto
ENDIF
* Reemplaza todos los espacios por
* los espacios de justificación
**********************************
cTexto = STRTRAN(cTexto, [ ], cEspacios)
* cTexto = cTexto+replicate([-],nAncho-LEN(cTexto))
* Si han sobrado espacios
* se pueden añadir entre palabras
*********************************
FOR i = 1 TO nModEspacios
* Averiguamos la posición de la palabra
***************************************
nDif = nPalabras + 1 - i
cPalabra = WordNum(cTexto,nDif)
nPos = RAT([ ]+cPalabra,cTexto)
* Insertamos un espacio más
***************************
cTexto = STUFF(cTexto,nPos,0,[ ])
NEXT
RETURN cTexto
--
Saludos. Jose A. Blasco
Zaragoza - España