El código para agregar los márgenes. Ojo, no agregarlos dentro de la propiedad RTF del componete porque este al guardar como que "limpia" el código rtf y elimina esas marcas. En cambuio lo hago usando una variable intermedia donde guardo el codigo rtf, hago los cambios en esa variable y luego la guardo, funciona perfecto. Los valores de márgenes que utilizo son 500 para los cuatro, queda aproximadamente 1,2 centímetros alrededor.
Código Delphi
[-]Function Agregar_Margenes_y_Guardar(Documento: String; MArgenI, MargenD, MargenS, MargenA: Word; Archivo: TFileName): String; Var
Posi: Longint;
Marca: String;
Fs: TFileStream;
Begin
Result := '';
If FileExists( Archivo ) Then
if Not DeleteFile(Archivo) Then Begin
MessageDlg('No se pudo eliminar el archivo existente antes de guardarlo: ' + Archivo, mtError, [mbOK, mbCancel], 0);
Exit;
end;
Marca:= '\margl' + IntTostr(MargenI) + '\margr' + IntToStr(MargenD) + '\margt' + IntToStr(MargenS) + '\margb' + IntToStr(MargenA); For Posi := Length( Documento ) DownTo 0 Do
If Documento[ Posi ] = '}' Then Break;
Insert( Marca, Documento, Posi); Result := Documento;
Fs := TFileStream.Create(Archivo, fmCreate);
try
Fs.Write(PChar(Documento)^, Length(Documento)); except
Result := ''; end;
Fs.Free;
end;
Otro problema que puede aparecer al hacer un "buscar-reemplazar" dentro del códigho RTF del TRichEdit son los caracteres especiales, por el tema del Unicode. Con este código "sucio y desprolijo"
lo soluciono:
Código Delphi
[-] Function Corregir_caracteres( Cadena1: String): String; Begin
Cadena1 := ReplaceStr( Cadena1, 'á','\u225\' ); Cadena1 := ReplaceStr( Cadena1, 'é','\u233\' );
Cadena1 := ReplaceStr( Cadena1, 'í','\u237\' );
Cadena1 := ReplaceStr( Cadena1, 'ó','\u243\' );
Cadena1 := ReplaceStr( Cadena1, 'ú','\u250\' );
Cadena1 := ReplaceStr( Cadena1, 'ñ','\u241\' );
Cadena1 := ReplaceStr( Cadena1, 'Á','\u193\' ); Cadena1 := ReplaceStr( Cadena1, 'É','\u201\' );
Cadena1 := ReplaceStr( Cadena1, 'Í','\u205\' );
Cadena1 := ReplaceStr( Cadena1, 'Ó','\u211\' );
Cadena1 := ReplaceStr( Cadena1, 'Ñ','\u209\' );
Cadena1 := ReplaceStr( Cadena1, '¿','\u191\' ); Cadena1 := ReplaceStr( Cadena1, '¡','\u161\' );
Corregir_Caracteres := Cadena1;
end;