Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-10-2023
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Márgenes en componente TRichMemo

Hola colegas usuarios de Lazarus.

Tengo la siguiente cuestión con el componente TRichmemo: cuando quiero guardar el contenido a un archivo .rtf el documento tiene un margen alrededor de 1 pulgada, que es demasiado, pero no encuentro la manera dentro del componente de configurar los márgenes. Se que el formato lo admite, porque si abro ese documento o creo uno nuevo con el todopoderoso LibreOffice, puedo configurar los márgenes (inferior, superior, derecho, izquierdo) sin problemas.

Si no puedo resolverlo con alguna propiedad, la única opción que me quedaría es insertar dentro del documento los tags de rtf con los valores de los márgenes antes de guardar a un archivo.

Saludos.
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.

Última edición por rretamar fecha: 05-10-2023 a las 19:05:30.
Responder Con Cita
  #2  
Antiguo 06-10-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
TRichMemo en Lazarus, en qué paleta está.
Responder Con Cita
  #3  
Antiguo 06-10-2023
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
TRichMemo en Lazarus, en qué paleta está.
Hola.
Hace rato que uso Codetyphon, está en la paleta "RichText":



Lo de los márgenes está resuelto:

Estuve revisando el componente TKmemo pero a la hora de mostrar los RTF (que tienen cierta complejidad en el contenido, no son sólo texto) tengo ciertos elementos que no se ven correctamente y en el Richmemo sí. Al final lo solucioné agregando las marcas con los valores de los márgenes dentro del contenido del rtf antes de guardar el documento, y funcionó perfecto, por ejemplo un valor de 300 "twips" para los 4 márgenes lo hago insertando estas marcas:

\margl300\margr300\margt300\margb300

Me ayudó mucho el libro "The RTF Cookbook" que está para consultar en línea:

https://metacpan.org/dist/RTF-Writer...ent_Formatting

Saludos.
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.

Última edición por rretamar fecha: 06-10-2023 a las 17:02:02.
Responder Con Cita
  #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
Poder: 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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Establecer Márgenes DElayed Varios 5 26-02-2015 22:56:52
margenes cmm07 Impresión 2 23-12-2008 20:47:40
Márgenes RichEdit carlohg OOP 1 14-05-2007 14:45:15
Configurar Margenes luxus Impresión 0 05-09-2005 23:57:46
FastReport, margenes en run-time guillotmarc Impresión 2 24-09-2003 16:28:03


La franja horaria es GMT +2. Ahora son las 23:39:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi