Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como obtener párrafos en un TMemo o bien en un TRichEdit (https://www.clubdelphi.com/foros/showthread.php?t=76899)

AzidRain 02-12-2011 22:59:27

Como obtener párrafos en un TMemo o bien en un TRichEdit
 
Estoy haciendo una modificación a un sistema ya en producción en donde en un TMemo escribe uno un texto y se envia por email, usando texto "plano". Mi cliente ahora quiere que se mande también en HTML sin que el formatee nada, es decir usando una plantilla (gracias a Dios) y nada más rellenándola con lo que escriba en el TMemo. Ya hice mis pruebas y todo funciona bien, excepto que los párrafos no son respetados y al pasarlo a HTML desde el TMemo ya que aparece todo junto como uno solo, probé ir agregándole un tag "</br>" antes de agregar cada línea al correo y si separa las líneas, pero obviamente no lo hace por párrafos.

¿Alguien sabe o conoce de alguna forma (con componente o sin él) de leer cada párrafo por separado?
¿No me queda de otra que ir leyendo linea por línea hasta detectar el retorno de carro y fin de línea y hacer generar el párrafo?

¿Alguna idea?

AzidRain 02-12-2011 23:21:44

Resuelto
 
A veces lo mas simple es lo mas efectivo:

1.- Tomamos el TMemo y le ponemos en false la propiedad wordwrap antes de leer las líneas.
2.- Leemos cada línea (que en realidad es un párrafo) y le agregamos el tag "</br>" al html que vamos a usar
3.- Seguimos hasta leer todas las líneas.
4.- Volvemos a poner el true el wordwrap.

Voilá..

Como seda.

Les dejo mi ejemplo de código, ojo no les sirve si no tienen los componentes pero puede dar una idea a quien tenga la misma duda:

Código:

procedure TFEnviarMailManual.AAceptarExecute(Sender: TObject);
var Mensaje: TMensajeMail;
    Correo : TMailer;
    I: Integer;
    HTMLLines: TStrings;


begin
  inherited;

  ememo.Properties.WordWrap := False;
  if eAsunto.Text='' then
  Begin
    MessError('Debe escribir el asunto que llevará el e-mail');
    eAsunto.SetFocus;
  End
  Else
  Begin
    if MessPregunta('¿Confirma que desea enviar los correos?')=mrYes then
    Begin
        try
          HTMLLines := TStringList.Create;
          //Llenamos la cabecera del HTML
          With HTMLLines Do
          begin
            Add('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"');
            Add('"http://www.w3.org/TR/html4/loose.dtd">');
            Add('<html xmlns="http://www.w3.org/1999/xhtml">');
            Add('    <head>');
            Add('        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />');
            Add('        <title>New Web Project</title>');
            Add('    </head>');
            Add('    <body>');
            Add(' <STYLE>');
            Add('{');
            Add('font-family:"Times New Roman";');
            Add(')font-size:20px;');
            Add('}');
            Add(' </STYLE>');

            Add('      <center><img src="http://www.aztecaplus.com/mailing/logomail.pn" alt="logotipo"></center>');
            Add('      <p class="cuerpo"><i>');
          end;

          //Ahora llenamos el cupero del correo

          for I := 0 to ememo.lines.Count - 1 do
            begin
              HTMLLines.Add(ememo.Lines.Strings[i]+'<br/>');
            end;

          //Finalmente cerramos el HTML

          With HTMLLines do
          begin
            Add('</i></p>');
            Add('</body>');
            Add('</html>');

          end;

          LabEnviando.Visible := True;
          Barra.Visible :=True;
          Barra.Min  := 0;
          Barra.Max  := ListaMails.Count;
          Barra.Step := 1;
          Correo := TMailer.Create;
          Try
            Correo.MailHost.Host    := capadatos.parm_servidor_smtp;
            Correo.MailHost.Username := capadatos.parm_email_Direccion;
            Correo.MailHost.Password := capadatos.parm_password_Direccion;
            Correo.cuenta_origen    := capadatos.parm_email_Direccion;





              correo.ConectaMail;

              for I := 0 to ListaMails.Count - 1 do
                  Begin
                    correo.EnviaEmailHTML('Azteca Plus',
                                        Correo.cuenta_origen,
                                      'cesarvinas@gmail.com',//ListaMails.Strings[i],
                                      easunto.Text,
                                      TStringList(HTMLLines),
                                      TStringList(ememo.Lines),
                                      eArchivo.Text);
                    Barra.StepIt;
                    Application.ProcessMessages;
                  End;
              correo.DesconectaMail;


          Finally
            Correo.Free;
            Barra.Visible        := False;
            LabEnviando.visible  := False;
          End;
        finally
          close;
          HTMLLines.Free;
          ememo.Properties.WordWrap := True;
        end;

   
          MessInfo('Se enviaron todos los mensajes');
    End;
  End;
end;


AzidRain 02-12-2011 23:24:13

Parece que el soft del foro insiste en interpretar los tags html como pueden ver en la parte que crea la cabecera del mensaje, ahi a ver si me ayuda algun moderador para dejarlos visibles.

Casimiro Notevi 03-12-2011 09:48:25

Le he puesto la etiqueta [code], ahora sale en una ventana y no queda tan funcional como con la etiqueta [delphi], pero al menos parece que se puede leer completo.
¿Lo dejo así?


La franja horaria es GMT +2. Ahora son las 03:55:54.

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