TStringList und TRichEdit (Add) problem)
-
ich habe das problem das beim adden bzw. laden eines file in eine TStringList, der text nicht so geladne wird wie er geaddet wurde. es wird nur die erste zeile aus der datei in die stringliste geladen. hinzugefügt wurde jedoch der ganze text von einem richedit. wohlbemerkt "hinzugefügt" und nicht zugewiesen. insofern dachte ich eigentlich das beim laden dann der text als "ein-item" in der stringliste ist. beispiel:
//--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { TEST = new TStringList; TEST->LoadFromFile("test.txt"); RichEdit1->Text = TEST->Strings[0]; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { delete TEST; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { TEST->Add(RichEdit1->Text); TEST->SaveToFile("test.txt"); } //---------------------------------------------------------------------------richedit enthält den text:
Ja das ist ein test das ist nun die nächte zeile und das ist die dritte!!! vierte und ende...!beim laden habe ich dann aber nur noch "Ja das ist ein test", sprich die erste zeile. wiesa das? bzw. wie mache ich das so wie ich es oben beschrieben möchte?
-
stefan kürti schrieb:
RichEdit1->Text = TEST->Strings[0];beim laden habe ich dann aber nur noch (...) die erste zeile.
Genau das machst Du mit der obigen Zeile. Schau mal in die Hilfe zu TStrings::Strings[], dann solltest
Du sehen, was ich meine.Gruß,
Alexander
-
ich glaube ich weis schon was du meinst. aber genau das will ich ja verhindern. das problem ist also die aufnahme in die stringlist, da scheinbar die zeilenumbrüche eines richedit als neues item gelten.
was ich aber will ist, den ganzen richedit->text als einen string in eine tstringlist adden. natürlich soll aber dann wenn ich dem richedit->text Strings[0] zuweise, das richedit wieder so sein wie es uhrsprünglich war. wie mache ich das? unabhängig ob das richedit zeilenumbrüche hat oder nicht..

-
stefan kürti schrieb:
ich glaube ich weis schon was du meinst.
Umgekehrt verhält es sich leider nicht so.
Warum lädst Du nicht einfach die Textdatei direkt in das RichEdit? Also warum der Umweg über eine
Stringliste?
Also wenn Du schon unbedingt den Umweg gehen willst, dann könntest Du z.B.:
1. Assign() verwenden,
2. Text zuweisen,
3. über Count alle einzelnen Strings per Add() zuweisen.Aber wahrscheinlich habe ich noch nicht begriffen, worum es Dir eigentlich geht.
Gruß,
Alexander
-
Aber wahrscheinlich habe ich noch nicht begriffen, worum es Dir eigentlich geht.
das richedit ist eine vorschau und eine eingabe fläche. man gibt dort text ein und dieser soll als item in eine stringlist. in einer listbox kann man einen eintrag mit einer bezeichnung anklicken und dann wird mittels dem index, der text aus der stringlist, in das richedit gespeisst. verstanden? wie lös eich das nun also "elegant"?
-
Hallo
so wie ich das verstehe, ist dein Problem, das du Zeilenumbrücke eines Textes aus dem RichEdit mit in einen String einer TStringList übernehmen und wiederherstellen willst.
Ich halte das für keine gute Lösung, aber du kannst ja alle Zeilenumbrüche ("\r\n") vom RichEdit mit StringReplace() in eine selbstgewählte Platzhalter-Zeichenkette umwandeln, und bein Wiederherstellen die Ersetzung wieder rückgängig machen.bis bald
akari
-
Ich halte das für keine gute Lösung
wie würdest du es dann lösen? (siehe letztes posting von mir)...
-
Hallo
Auf Anhieb fällt mir da erstmal Dateien ein :
Statt einer in einer StringList speicherst du die Texte der RichEdits in Dateien, die du passend benennst, so das du wie in einem Array/Map über den Dateinamen die entsprechende Datei wiederfindest, wenn du den Text wieder brauchst.
Das hätte zwei Vorteile : du must nichts konvertieren (ist eine Fehlerquelle) und sparst Arbeitsspeicher.bis bald
akari
-
das ist zwar keine schlechte idee aber gefällt mir persöhnlich nicht so

möchte nicht umbedingt dann hunderte einzel dateien, wenns auch mit einer datei gehen würde..es muss doch irgendwie lösbar sein. das mit dem formatieren (StringReplace) wäre zwar nett, aber woher soll ich beim zurückholen wissen, wo ein zeilenumbruch war...
hmm
-
Hallo
du must dir eben ein Ersatz für den Zeilenumbruch ausdenken :
AnsiString RichText; // Text für RichEdit AnsiString ListText; // Text für StringList ListText = StringReplace(RichText, "\r\n", "<$%>", TReplaceFlags() << rfReplaceAll); // RichText in einzeilgen ListText umwandeln, der in eine StringList angefügt werden kann RichText = StringReplace(ListText, "<$%>", "\r\n", TReplaceFlags() << rfReplaceAll); // Umgekehrte Umwandlung von ListText nach RichTextDas "<$%>" legtst du einfach selber fest. Nimm am besten ein paar Escape-Sequenzen, die der User nicht eingeben kann.
bis bald
akari
-
Den StringReplace-Ansatz finde ich nicht besonders schön.
Ich würde zur internen Datenhaltung einen vector<AnsiString> verwenden und zur Speicherung eine XML-Datei.Gruß,
Alexander