Ver Mensaje Individual
  #6  
Antiguo 19-01-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 17
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
La funcion Format no es el problema. El problema es que el RichEdit solo te permite acceder al texto enriquecido manipulando todo a traves de Streams. Del mismo modo que si al guardar el valor en algun lado (ej en una tabla de una base de datos) usaras algo asi

Código Delphi [-]
procedure GuardarTextoRichEdit(RichEdit: TRichEdit);
var
  qry: TQuery/TADOQuery/, cualquier tipo de query
begin
  qry.SQL.Text := asignar sql para actualizar o insertar el campo;
  qry.ParamByName('p1').DataType := ftBlob;
  qry.ParamByName('p1').AsString := RichEdit.Text;  
  // falla porque RichEdit.Text devuelve el texto "plano", sin las etiuquetas para el formato de texto enriquecido. 
  // Perderias la informacion de negrita, sangria, etc
  qry.Execute; 
end;

Por eso te preguntaba como lo guardabas. Para guardarlo lo haces de la manera correcta, usando Streams.

Ahora el problema esta en como lo "recuperas" de la base de datos

Yo cree la siguiente aplicacion de prueba, que solo tiene un RichEdit y en lugar de una base de datos utilizo un archivo en el disco rigido, pero el concepto es el mismo:

Primero cree un boton que genera dicho archivo de texto, le copie y pege el mismo texto que el de tu mensaje y luego hice click en el boton para ejecutar este codigo:

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  Stream: TStringStream;
begin
  Stream := TStringStream.Create;
  try
    RichEdit1.Lines.SaveToStream(Stream);
    RichEdit1.Lines.SaveToFile('C:\Users\Agustin\Desktop\richedit.txt');
  finally
    Stream.Free;
  end;
end;

Esto me genero un archivo con el siguiente contenido:

Código:
{\rtf1\ansi\ansicpg1252\deff0\deflang11274{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}}
\viewkind4\uc1\pard\f0\fs24 "Que el estudiante %s identificada con documento de identidad n\'famero %s, curs\'f3 y aprob\'f3 en este centro educativo, el grado de %s de b\'e1sica primaria durante el a\'f1o lectivo de %s, de conformidad con la ley 115 de 1994 y el decreto 1290 de 2009 y los criterios definidos en el sistema institucional de evaluaci\'f3n de estudiantes (SIEE) obteniendo las valoraciones finales exigidas para la aprobaci\'f3n al grado %s y promoci\'f3n al grado %s de %s "\par
}
Si ahora cargo ese contenido en un RichEdit lo que veo es lo siguiente:



Luego uso los botones de la barra superior para aplicarle formato en negrita a las partes que dice "%s". Si vuelvo a guardar ese contenido lo que me queda ahora es tu plantilla:

Código:
{\rtf1\ansi\ansicpg1252\deff0\deflang11274{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}}
\viewkind4\uc1\pard\f0\fs24 "Que el estudiante \b %s\b0  identificada con documento de identidad n\'famero \b %s\b0 , curs\'f3 y aprob\'f3 en este centro educativo, el grado de \b %s \b0 de b\'e1sica primaria durante el a\'f1o lectivo de \b %s,\b0  de conformidad con la ley 115 de 1994 y el decreto 1290 de 2009 y los criterios definidos en el sistema institucional de evaluaci\'f3n de estudiantes (SIEE) obteniendo las valoraciones finales exigidas para la aprobaci\'f3n al grado \b %s \b0 y promoci\'f3n al grado \b %s \b0 de\b  %s \b0 "\par
}
Este Texto se muestra de la siguiente manera en el RichEdit:



Para cargar texto con formato en el RichEdit es a la inversa que para guardar: usando Streams.

El siguiente codigo hace lo que necesitas, la unica diferencia es que yo uso un FileStream para cargar la plantilla:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  ReadStream, FormatStream: TStringStream;
  FileStream: TFileStream;
begin
  FileStream := nil;
  ReadStream := nil;
  FormatStream := nil;

  // leo el archivo que ya esta generado
  FileStream := TFileStream.Create('C:\Users\Agustin\Desktop\richedit.txt', fmOpenRead);
  try
    // creo un TStringStream y lo cargo con el contenido del archivo
    ReadStream := TStringStream.Create;
    ReadStream.LoadFromStream(FileStream);

    // como el StringStream es inmutable (no puedo hacer algo como ReadStream.DataString := '')
    // necesito crear otro Stream el cual inicializo usando la funcion format sobre el string anterior
    FormatStream := TStringStream.Create(
      Format(ReadStream.DataString, ['bla', 'bla', 'bla', 'bla', 'bla', 'bla', 'bla']));

    // cargo el Stream en el RichEdit. Si asigno directamente sobre Text o Lines.Text pierdo el formato
    RichEdit1.Lines.LoadFromStream(FormatStream);
  finally
    FileStream.Free;
    ReadStream.Free;
    FormatStream.Free;
  end;
end;

Resultado:

Responder Con Cita