richedit inhalt zwischenspeichern



  • Hi,

    benutzt TStringList

    TStringList* List=new TStringList;

    List->AddStrings(RichEdit1->Lines);

    // und wieder zurück

    das machste in einem Array in der Größe ==Anzahl der Einträge der Compobox



  • Original erstellt von AndreasW:
    List->AddStrings(RichEdit1->Lines);

    Gehen dabei nicht eventuell vorhandene Formatierungen verloren (RichEdit)!? Deshalb nämlich der Hinweis auf TStringStream.



  • Original erstellt von Jansen:
    [quote]Original erstellt von AndreasW:
    [qb]List->AddStrings(RichEdit1->Lines);

    Gehen dabei nicht eventuell vorhandene Formatierungen verloren (RichEdit)!? Deshalb nämlich der Hinweis auf TStringStream.[/QB][/QUOTE]

    ja, richtig. Wäre so gesehen besser. Sorry, hab nihct drüer nachgedacht 🙄



  • hmm... also, wenn die formatierung verloren geht, ist das kein problem...

    ich wollte jetz mal nur nachfragen, wie ihr euch das genau vorgestellt habt.
    wenn ich nun also TStringStream hernehme, woher weiß ich dann, was zu welchem inhalt gehört... ich hab ja da keinen index oder ähnliches.
    hab ich da jetz was falsch verstanden?
    ich weiß, dass mir keine lösung vorgekaut gegeben wird, will ich ja auch gar nicht, aber wenn ihr mir noch ein bischen helfen könntet, wäre ich euch sehr verbunden *welch satz* 😃

    cu & thx



  • Original erstellt von riebl:
    wenn die formatierung verloren geht, ist das kein problem

    Warum dann nicht einfach ein Memo?

    Wenn Formatierungen keine Rolle spielen kannst du dich an Andreas' Vorschlag orientieren und eine StringList als Zwischenspeicher benutzen (Text-Property des Memos jeweils als ein Item in der StringList). Die Zuordnung kannst du dann einfach über den jeweiligen Index der ComboBox und der StringList herstellen.



  • RichEdit brauch ich wegen SyntaxColoring...

    ich hab das ganze auch soweit verstanden:
    den inhalt von RichEdit (RichEdit->Lines) als einen String in die StringList adden.

    ich nehme an die Lines als einzigen String herzunehmen ist das mit Text-Property. also wollt ich mich darüber schlau machen, hab aber nix in der hilfe gefunden. ich geh euch sicherlich schon auf die nerven, aber wie ist das nun mit property? bitte seid mir wegen meiner dummen fragerei nicht böse...

    cu & thx



  • Original erstellt von riebl:
    RichEdit brauch ich wegen SyntaxColoring

    Oh Mann, ich brech gleich zusammen ... 😉

    Textfarben sind Formatierungen!

    Also nimm doch (ein Array von) TStringStream (RichEdit::Lines::SaveToStream), die Zuordnung lässt sich dann über den Arrayindex und den ComboBox-Index herstellen.



  • Oh Mann, ich brech gleich zusammen ...

    Bleib mal standhaft, Jansen. 😉 Vielleicht braucht er die Formatierung im RichEdit, aber nicht im Zwischenspeicher. Vielleicht. Dann reicht wie gesagt auch eine StringList. Und da würde ich

    TStringList* List = new TStringList;
    List->AddStrings(RichEdit1->Lines);
    // mach was
    delete List;
    

    empfehlen.



  • Original erstellt von WebFritzi:
    List->AddStrings(RichEdit1->Lines);

    Hmm, das finde ich eher ungünstig. Dabei verlierst du doch die (einfache) Möglichkeit der Index-Zuordnung!? Oder willst du wirklich für jede Speicherung eine neue StringList benutzen? Ist doch total umständlich.



  • jansen: ich weiß das syntaxcoloring formatierung ist, aber ich brauch das, wie andreas vermutet hat, nicht im zwischenspeicher.
    ich werd also nun mir ein TStringStream Array machen 😃
    danke nochmal für alles!



  • Das Stream-Array ist aber um einiges umständlicher als die StringList-Methode, wenn die Textattribute 😉 nicht benötigt werden würde ich auf jeden Fall letzteres benutzen.



  • jansen: na gut, dann eben StringList, wie sie meinen, master 😃
    für jeden inhalt also eine StringList... das werd ich (hoffentlich) noch schaffen 😉



  • Original erstellt von riebl:
    für jeden inhalt also eine StringList

    Eben nicht! Das ist ja das Gute an der StringList-Lösung: eine StringList, jedes Item enthält jeweils einen RichEdit-Inhalt (TRichEdit::Text).



  • jansen: achja, genau... hab heute mathe schulaufgabe geschrieben, bin wohl deswegen nicht mehr ganz auf der geistigen höhe... 🙂



  • Hi,
    Ich habe das selbe mit TabControl gemacht, aber mir unterläuft da wohl ein Denkfehler. Hier mal der hauptsächliche Code:

    THauptfenster *Hauptfenster;
    int count = -1;  //Anzahl der Tabs beim TabControl
    TStringList* Inhalt = new TStringList;
    //---------------------------------------------------------------------------
    void __fastcall THauptfenster::FormCloseQuery(TObject *Sender, bool &CanClose)
    {
     delete Inhalt;  //Beim Beenden des Programmes wird der Speicher wieder freigegeben
    }
    //---------------------------------------------------------------------------
    void __fastcall THauptfenster::EditorenChange(TObject *Sender)
    {
     Editor->Text = Inhalt->Strings[Editoren->TabIndex];  //sollte dem RichEdit den String-Eintrag aus der TStringList mit dem selben Index wie dem Tab zuweisen
    }
    //---------------------------------------------------------------------------
    void __fastcall THauptfenster::EditorenChanging(TObject *Sender,
        bool &AllowChange)
    {
     Inhalt->AddStrings(Editor->Lines);  //Fügt den gegenwärtigen RichEdit-Inhalt der TStringList hinzu, bevor der neue Register den Focus bekommt
    }
    //---------------------------------------------------------------------------
    void __fastcall THauptfenster::DateiNeueDateiClick(TObject *Sender)
    {
     if (count == -1) Editor->Show();  //Am Anfang ist das RichEdit(Editor) noch unsichtbar
     ++count;
     Hauptfenster->ActiveControl = Editor;
     SaveDialog->FileName = "Neu" + AnsiString(count);
     Editoren->Tabs->Add(SaveDialog->FileName);  //Fügt dem TabControl einen Register hinzu
     Editoren->TabIndex = count;  //Der aktuelle Register ist immer der neu erstellte
    }
    //---------------------------------------------------------------------------
    

    Jedoch funzt das nicht, irgendwo liegt da der Fehler.



  • Inhalt->Add(Editor->Text);
    

Anmelden zum Antworten