Saludos compañeros
He vuelto a mi planteamiento inicial y parece que ya funciona. Esperemos...
La idea era la siguiente:
Leer el fichero RTF, seleccionar la información referente a uno de los productos y mostrar esta información en el RichEdit.
Pero se perdía el formato del texto.
¿Porqué?
Porque las líneas extraidas necesitan de la información del encabezado del fichero RTF. Lo puedes comprobar cargando el fichero en el IDE de Delphi.
Por lo tanto la tarea consiste en localizar estas líneas y pasarlas al RicheEdit junto con las seleccionadas.
¿Cuales son estas líneas?
Me ha parecido comprobar que el tamaño de las mismaas varía de un RTF a otro.
Así que he utilizado el siguiente truco...
Al principio del fichero RTF pongo una señal: INIFILE.
Las líneas que estén por encima (unas 40) serán la cabecera.
Y las líneas comprendidas entre cada número de producto serán la descripción del mismo.
¡IMPORTANTE!
Conviene dejar una línea en blanco por encima y debajo de cada señal, al redactar el texto en Word. Simplemente por precaución....
Bueno os pongo el código...
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
nfin,nIni: integer;
nIniFile,i : integer;
FichRTF,mislineas : TStringList;
begin
FichRTF:=TStringList.Create;
mislineas:=TStringList.Create;
FichRTF.LoadFromFile('TEXT.RTF');
nIniFile:=0; nIni:=0; nFin:=0; for i:=0 to FichRTF.Count-1-1 do
begin
if AnsiPos('INIFILE', FichRTF[i])>0 then nIniFile := i;
if AnsiPos('12345', FichRTF[i])>0 then nIni := i;
if AnsiPos('12346', FichRTF[i])>0 then begin nFin := i;break;end;
end;
if (nIniFile=0)or(nIni=0)or(nFin=0) then showmessage ('Problema');
for i:=0 to nIniFile-1 do
mislineas.add(FichRTF.Strings[i]);
for i:=nIni+1 to nFin-1 do
mislineas.add(FichRTF.Strings[i]);
RichEdit1.Text:=mislineas.Text;
end;
Esto es todo.
Seguramente se me escapa algo...
En respuesta al compañero rrf... Pienso que el delete, una a una, de las líneas tiene que ser algo lento si el texto es abundante...
Gracias...