Ver Mensaje Individual
  #4  
Antiguo 15-10-2023
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Reputación: 20
rretamar Va camino a la famarretamar Va camino a la fama
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;  // Agregar valore de márgenes a documento RTF en formato string (variable "documento") y guardarlo como archivo
Var
  Posi: Longint;
  Marca: String;
  Fs: TFileStream;
Begin
  Result := '';
  If FileExists( Archivo ) Then
      if Not DeleteFile(Archivo) Then   // Por segurodad, borrar archivo RTF previo, si existiera
        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);   //    \margl300\margr300\margt300\margb300
  For Posi := Length( Documento ) DownTo 0 Do
    If Documento[ Posi ] = '}' Then Break;
  //
  Insert( Marca, Documento, Posi);   // Insertar marcadores con valores de los márgenes
  Result := Documento;
  //
  Fs := TFileStream.Create(Archivo, fmCreate);
  try
    Fs.Write(PChar(Documento)^, Length(Documento)); // Guardar archvo RTF a partir de la cadena "documento"
  except
    Result := ''; // Si no se puedo realizar el guardado, devolver una cadena vacia, de lo contrario devolver el texto rtf modificado
  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;   // corregir caracteres especiales en texto RTF (acentos, eñes)
  Begin
    Cadena1 := ReplaceStr( Cadena1, 'á','\u225\' );  // Minúsculas
    Cadena1 := ReplaceStr( Cadena1, 'é','\u233\' );
    Cadena1 := ReplaceStr( Cadena1, 'í','\u237\' );
    Cadena1 := ReplaceStr( Cadena1, 'ó','\u243\' );
    Cadena1 := ReplaceStr( Cadena1, 'ú','\u250\' );
    Cadena1 := ReplaceStr( Cadena1, 'ñ','\u241\' );
    //
    Cadena1 := ReplaceStr( Cadena1, 'Á','\u193\' );  // Mayúsculas
    Cadena1 := ReplaceStr( Cadena1, 'É','\u201\' );
    Cadena1 := ReplaceStr( Cadena1, 'Í','\u205\' );
    Cadena1 := ReplaceStr( Cadena1, 'Ó','\u211\' );
    Cadena1 := ReplaceStr( Cadena1, 'Ñ','\u209\' );
    //
    Cadena1 := ReplaceStr( Cadena1, '¿','\u191\' );  // Signos
    Cadena1 := ReplaceStr( Cadena1, '¡','\u161\' );
    //
    Corregir_Caracteres := Cadena1;
  end;
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.

Última edición por rretamar fecha: 15-10-2023 a las 17:40:23.
Responder Con Cita