Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Memo Field HTML Linebreaks einfügen (https://www.delphipraxis.net/168488-memo-field-html-linebreaks-einfuegen.html)

Mike_ 24. Mai 2012 09:49

Delphi-Version: 2007

Memo Field HTML Linebreaks einfügen
 
Hallo,

ich versende eine E-Mail als Contenttype text/html (via Indy).

Mein Memofeld übergibt die Linebreaks nicht, so dass nur ein laaaange String in die Mail geparsed wird.
Ich benötige die Linebreaks aus dem Memo in der Mail.
Wie bekomme ich <br> o.Ä. in das Memofeld, damit die Absätze richtig angezeigt werden in der Mail?

Z.Zt. wird es mit "AddStrings(MRequest.Lines);" in die Mail geparsed.

Habe bereits nach "linebreak memo indy mail html delphi add" gegoogelt, ohne Ergebnis.

Danke im Voraus,

Mike

Klaus01 24. Mai 2012 09:53

AW: Memo Field HTML Linebreaks einfügen
 
Guten Morgen,

kannst Du da nicht mit StringReplace arbeiten und #10#13 durch <br> ersetzen?

Grüße
Klaus

Mike_ 24. Mai 2012 10:01

AW: Memo Field HTML Linebreaks einfügen
 
Zitat:

Zitat von Klaus01 (Beitrag 1167877)
Guten Morgen,

kannst Du da nicht mit StringReplace arbeiten und #10#13 durch <br> ersetzen?

Grüße
Klaus

Gute Idee!
Leider klappt es noch nicht ganz... sieht aus wie vorher.

Hier mein Code:

Delphi-Quellcode:
[...]
  after : String;
[...]
              after := StringReplace(Memo1.Text, '#10#13', '<br/>',
                          [rfReplaceAll, rfIgnoreCase]);
[...]

               Add(after);
Update:

So klappt es, danke :) :

Delphi-Quellcode:
              after := StringReplace(Memo1.Text, #13#10, '<br/>',
                          [rfReplaceAll, rfIgnoreCase]);

DeddyH 24. Mai 2012 10:04

AW: Memo Field HTML Linebreaks einfügen
 
Nimm doch die Konstante sLineBreak, die ist auch korrekt mit #13#10 (und nicht andersherum) deklariert.

Klaus01 24. Mai 2012 10:09

AW: Memo Field HTML Linebreaks einfügen
 
.. #10#13 nicht als StringKonstante einfügen, also ohne ''.
Bin mir jetzt auch nicht 100% sicher ob #10#13 oder #13#10 ..
Grüße
Klaus

Popov 24. Mai 2012 10:27

AW: Memo Field HTML Linebreaks einfügen
 
Kurz und Schmerzlos:

Delphi-Quellcode:
var
  s: String;
  i: Integer;
begin
  s := '';
  for i := 0 to Memo1.Lines.Count - 1 do
  begin
    s := s + Memo1.Lines[i];
    if not (i = (Memo1.Lines.Count - 1)) then s := s + '<br>';
  end;

  ShowMessage(s);
end;
In der Variable S steht dein HTML Text, bzw. Text mit BR-Tags.

//Edit:

Oder wenn es im Memofeld sein soll:

Delphi-Quellcode:
var
  i: Integer;
begin
  for i := 0 to Memo1.Lines.Count - 1 do
    if not (i = (Memo1.Lines.Count - 1)) then
      Memo1.Lines[i] := Memo1.Lines[i] + '<br>';
end;
Die Zeilen
Delphi-Quellcode:
if not (i = (Memo1.Lines.Count - 1)) then
sind dazu da, damit die letzte Zeile ausgeschlossen wird. Kann man auch weglassen, dann hat die letzte Zeile auch ein BR-Tag.

DeddyH 24. Mai 2012 10:34

AW: Memo Field HTML Linebreaks einfügen
 
Nur dass das Ergebnis bei eingeschaltetem WordWrap nicht stimmt. Die ständige String-Umkopiererei verbraucht auch eine Menge Zeit und Speicher, so dass ich die StringReplace-Variante da schon besser finde (selbst wenn die auch nicht unbedingt schnell ist).

[edit] OK, bei eingeschaltetem WordWrap passt auch Text nicht mehr, hatte ich verdrängt. [/edit]

Popov 24. Mai 2012 10:40

AW: Memo Field HTML Linebreaks einfügen
 
Ich meine, du hast schon Recht, aber ich gehe mal davon aus, dass es nur paar Zeilen sind, ich glaube der Zeitverlust hält sich in Grenzen.

himitsu 24. Mai 2012 10:49

AW: Memo Field HTML Linebreaks einfügen
 
Schade, aber wenn es nicht grade um ein Memo ging, dann auch so.
Delphi-Quellcode:
SL.LineBreak := '<br>';
S := SL.Text;
SL.LineBreak := sLineBreak;
Denn interne TMemoStrings ignoriert beim GetText das LineBreak. :cry:
Schade daß der Delimiter für DelimitedText nur ein Char ist, denn der funktioniert.

p80286 24. Mai 2012 11:28

AW: Memo Field HTML Linebreaks einfügen
 
Zitat:

Zitat von Mike_ (Beitrag 1167876)
Mein Memofeld übergibt die Linebreaks nicht, so dass nur ein laaaange String in die Mail geparsed wird.

entschuldigung, wo ist da das Problem? die CRLF (#13#10) haben in Textverarbeitungsprogrammen und in den mir bekannten Mail-Programmen die Funktion einer "Absatzmarke" bekommen. Im allg. ist es so, daß Text an die Darstellungsgröße angepasst dargestellt wird. Nicht umsonst kennt TMemo das Wordwrap. Hast Du es denn schon mal mit einem "ordentlich" erfassten Text versucht?

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz