Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-01-2017
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Mantener "formato" del texto en format

Hola amigos del foro, tengo un componente RichEdit, sobre el cual cargo una plantilla que está en una tabla, esta plantilla tiene formato cierto tipo de letra, tamaño y algunas parte en negrita, la información la debo completar con algunos datos que el usuario va a tomar

para rellenar los datos faltantes utilizo la función FORMAT, pero esta me devuelve el texto sin formato.

Mi pregunta es cómo hacer para se mantenga el formato original y no tener que volver a formatear el texto.


Mil gracias


Gustavo Cruz
Responder Con Cita
  #2  
Antiguo 19-01-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Como guardas el texto en la tabla? No podes realizar una prueba y verificar que en la tabla efectivamente estes guardando el texto con los tags para el formato RichEdit?
Responder Con Cita
  #3  
Antiguo 19-01-2017
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Hola AgustinOrtu gracias por tu respuesta, de hecho el guardado del archivo en la tabla es correcta, lo hace con su formato y todo, el problema es cuando utilizo la función de "format" me devuelvo un texto sin formato alguno... yo cargo esto en en mi richedit tal cual como está almacenado en la tabla:

"Que el estudiante %s identificada con documento de identidad número %s, cursó y aprobó en este centro educativo, el grado de %s de básica primaria durante el año 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ón de estudiantes (SIEE) obteniendo las valoraciones finales exigidas para la aprobación al grado %s y promoción al grado %s de %s "

cuando llenos los datos me devuelte esto la función "format"

"Que el estudiante ALMANZA RODRIGUEZ LEONARDO ESTEBAN identificada con documento de identidad número RC 1112099779, cursó y aprobó en este centro educativo, el grado de CUARTO de básica primaria durante el año lectivo de 2016, de conformidad con la ley 115 de 1994 y el decreto 1290 de 2009 y los criterios definidos en el sistema institucional de evaluación de estudiantes (SIEE) obteniendo las valoraciones finales exigidas para la aprobación al grado CUARTO y promoción al grado de BÁSICA SECUNDARIA"

y debería tener en Negrita todas las palabras que están en mayúscula

Gracias por tu colaboración
Responder Con Cita
  #4  
Antiguo 19-01-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
No me respondiste la pregunta
Responder Con Cita
  #5  
Antiguo 19-01-2017
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Hola AgustinOrtu, la guardo esta manera
Código Delphi [-]
var  
begin 
  try
    ms := TMemoryStream.Create;
    ms.Position := 0;
    Editore.Lines.SaveToStream(ms);
    with fDatos.qEjecutar do
    begin
      Close;
      sql.Clear;
      sql.Add('update or insert into promocion(idematricula, detalle, ' +
        'fechael, algrado, observaciones)values(''' + fGrupo.qCurso.FieldByName
        ('id_ma').AsString + ''', 1, ''' + dadoel_ + ''', ''' + nom_promo.Text
        + ''', ''' + pro_observaciones.Text + ''')matching(idematricula)');
      ParamByName('p1').DataType := ftBlob;
      ParamByName('p1').LoadFromStream(ms, ftBlob);
      ExecSQL;
      fDatos.Transaccion.CommitRetaining;
      MsgBox(Titulo, 'Datos guardados satisfactoriamente...', mtInformation,
        ['Aceptar'], 0);
      Close;
    end;
  finally
    ms.Free;
  end;

eso me guarda con el formato que le dé en el richedit...

pero la cuestión es: cómo hago para que la función "format" no le quiete el formato al texto cuando lo trago de la base de datos y llene los campos

Última edición por GustavoCruz fecha: 19-01-2017 a las 22:51:30.
Responder Con Cita
  #6  
Antiguo 19-01-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
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
  #7  
Antiguo 20-01-2017
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Thumbs up

AgustinOrtu un millón de gracias por tu colaboración era justo lo que necestiba
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
"Delphi al Limite" completo (formato PDF) rretamar Noticias 20 15-06-2013 16:27:31
Problemas con fechas, cambiar de formato "mm/dd/aaaa" a "dd/mm/aaaa" nurilla Firebird e Interbase 6 18-02-2010 13:40:53
Formato de partición para "Mis Documentos" Ñuño Martínez Windows 9 12-06-2008 16:31:18
Problema Formato "#0.00": Delphi 2006 K-ba OOP 10 17-10-2007 14:27:36
Como Obviar el formato de Fecha del Servidor para Salvar sólo en formato "dd/mm/yyyy" R_Richards Varios 4 07-02-2005 15:57:19


La franja horaria es GMT +2. Ahora son las 09:28:05.


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