TStringList LoadFromFile Zeilenumbruch



  • _MailItemPtr MItem = DataModule2->ola->CreateItem(0);
    

    Wobei ola = TOutlookApplication ist...



  • Habe jetzt gesehen, dass es auch

    MItem->set_HTMLBody()
    

    gibt. Damit kann ich schon mal einen zweizeiligen Text verfassen:

    MItem->set_HTMLBody(L"Zeile 1 <br/> Zeile 2");
    

    Jetzt versuche ich es mal damit meine StringList in die Mail zu bekommen.



  • @torsten_156
    Nein, das meinte ich nicht. MItem->HTMLBody ist ein Delphi Property, das zum Lesen get_HTMLBody und zum setzen set_HTMLBody() aufruft. Zwischen MItem->HTMLBody = L"Zeile 1 <br> Zeile 2" und MItem->set_HTMLBody( L"Zeile 1 <br> Zeile 2" ) gibt es keinen Unterschied. Der Typ von MItem->HTMLBody ist BSTR, deswegen darfst du da auch nicht einfach zwei Zeiger addieren. Ich bin mir da nicht ein Mal sicher, ob du da direkt einen Zeiger zuweisen darfst, oder ob du den per Zuweisung setzen darfst. Und ob du den vorherigen Speicher nicht freigeben musst, oder ob das der Delphi Wrapper für dich erledigt. Ich kenne mich damit aber auch nicht wirklich aus, vielleicht weiß da jemand mehr.
    Aber wirf mal einen Blick hierauf:
    Allocating and Releasing Memory for a BSTR und
    SysAllocString function



  • @torsten_156: Du stellst dich da aber ein wenig unbeholfen an - du solltest dir wirklich die Mühe machen, die einzelnen Datentypen zu unterscheiden lernen (insb. eben durch die gelieferten Fehlermeldungen).

    Erzeuge einfach eine temporäre String-Variable und füge dort in der Schleife die einzelnen Zeilen hinzu.
    Und nach der Schleife weist du diese String-Variable dann dem HTMLBody zu.



  • Genau das habe ich jetzt gemacht:

    	for(int i = 0; i < body->Count; i++)
    	{
    		sVALUE += body->Strings[i];
    		sVALUE += "<br/ ";
    
    		//MItem->HTMLBody = body->GetText(); //--> hier wird der Text OHNE Zeilenumbruch ausgegeben
    //		MItem->HTMLBody += body->Strings[i].w_str();
    //		MItem->HTMLBody += "<br/>";
    
    
    	}
    
    	MItem->set_HTMLBody(WideString(sVALUE).c_bstr());
    

    Compiliert wird das ganze. Doch die Ausgabe in der Mail zeigt lediglich die erste Zeile an. Hier mal der Inhalt der drei Zeilen;

    Zeile 1 = "Sehr geehrte Damen und Herren,"
    Zeile 2 = "anbei die Liste der letzen Woche."
    Zeile 3 = " Mit freundlichen Grüßen"

    Wenn ich mir den String im Debugger ansehe, wird er korrekt gebildet. Nach jeder Zeile wird ein <br/> eingefügt. Nur die Ausgabe in der Mail zeigt nur die erste Zeile an!



  • @torsten_156 sagte in TStringList LoadFromFile Zeilenumbruch:

    sVALUE += "<br/ ";

    Fehlt da nicht eine Klammer-zu (>)?

    Edit: Falls das nur ein Schreibfehler hier im Forum war, dann schau dir mal den HTML-Quelltext der erzeugten Mail an.



  • Ups, stimmt. Ist korrigiert...

    Einen ersten Zeilenumbruch habe ich jetzt schon mal.Leider wird nicht der ganze Text eingefügt!? Er stoppt hier:

    Sehr geehrte Damen und Herren,
    anbei die Liste d
    
    

    Was ist das denn jetzt???



  • Warum <br/> und nicht <br>?



  • Ich tippe auf ANSI/WideString-Probleme.
    Brauchst du wirklich WideString?

    Gib mal mehr Zeilen aus. Erhältst du dann einen längeren Text?



  • Das Ding ist ein BSTR! Wer besitzt den denn? Und wird bei der Zuweisung wirklich eine Kopie der Zeichenkette erzeugt oder wird nur der Pointer auf die Zeichenkette gesetzt und wird nach Zerstörung des temp. Strings zu einem dangling pointer?



  • @Th69 sagte in TStringList LoadFromFile Zeilenumbruch:

    Ich tippe auf ANSI/WideString-Probleme.
    Brauchst du wirklich WideString?

    Gib mal mehr Zeilen aus. Erhältst du dann einen längeren Text?

    Ich habe jetzt mal in der Vorlagendatei zehn Zeilenümbrüche (ENTER) angefügt. Nun wird mit der gesamte Text der Vorlagendatei ausgegeben. 🙂

    Verstehe aber nicht warum???

    Danke und Gruß
    Torsten


Anmelden zum Antworten