Speichernproblem mit Memo+RichEdit in Datei
-
Warum nutzt du nicht einfach TStringList?
Ich denke das eigentliche Problem ist die Zeile
Mem = MemoSave;in SavePrepare().
Du erzeugst zwar immer ein neues Memo, dirigierst aber den entsprechenden Zeiger sofort wieder um, so dass alles in MemoSave geschrieben wird. Und wenn du dessen Inhalt nicht löschst, doppeln sich die Einträge.
Außerdem bekommst du so ein massives Speicherleck...
/Edit: Manchmal habe ich das Gefühl, ihr macht das mit Absicht...
-
Ach Gott ja C++, mein Leidensweg.
Ich danke euch für die fixe Hilfe!
Deinen Code Jansen, werde ich gleich mal ausprobieren.
An eine StringList hatte ich auch schon gedacht, nachdem ich schon für ein andrees Problem zu einem Thread hier gelengt wurde mit StringListen.Mit Absicht würde ich nicht sagen, nur aus Unfähigkeit...

MfG M
-
Dein Code Jansen war genau der richtige Anstoß

Allerdings muss es heißen:[cpp]
void __fastcall TFormMain::Speichernunter1Click(TObject *Sender)
{
FileType = Page->Caption; //Type of File
if (SaveDialog1->Execute()) {
FileName = ExtractFileName(SaveDialog1->FileName); //get FileName from UserInput
FileName.Delete(FileName.Pos('.'), FileName.Length()); //extract File NameTStringList *list = new TStringList();
SavePrepare(list);
list->SaveToFile(SaveDialog1->FileName); //write File
delete list;
}
else FileName = "untitled";
} [/cpp]Sonst wird beim Dateinamen nicht die Endung abgeschnitten.
Wie gesagt, DANKE.
-
Eine Frage hätte ich aber noch dazu.
Wie kann ich in der StringListe ohne eine Leerzeile etwas anfügen. Mit der Add Funktion erhalte ich jeweils eine Leerzeile zwischen den RichEdits und zw. Memo und RichEdit.
Ich habe es schon mit Inser versucht und die Länge der Liste mit Count ermittelt, aber wenn ich da verusche über Count eine Position fest zulegen "tmpStrList->Count+3" erhalte ich nur den Fehler Maximum oder minimum überschritten.MfG M
-
Hallo
Add() fügt keine Leerzeile hinzu, sondern einen Zeilenumbruch. Die Leerzeile muß aus deinen Daten kommen.
bis bald
akari
-
macsmac schrieb:
Mit Absicht würde ich nicht sagen, nur aus Unfähigkeit...

War auch nicht auf dich bezogen, sondern auf diejenigen, die es immer wieder schaffen eine halbe Sekunde vor mir zu posten...
-
Aso, ja das ist sicher mit Absicht

Also das Problem mit der Leerzeile habe ich nun gelöst.
Ich habe das MemoSave pertmpList->AddStrings(MemoSave->Lines);eingelesen. wird es als ..(MomoSave->Text); in die Strinliste geschrieben wird es als ein eniziger String behandelt. Das steht natürlich nirgens in der BCB Hilfe... Da wird dann wohl ein \n mitgelesen, was das Ende vom Memofeld signalisiert, obwohl doch da besser ein \0 stehen sollte oder? Na nun ist's auch egal.
MfG M
-
Ha, ich habe doch noch ein Problem. Vermutlich ist es trivial.
Meine RichEdits liegen auf TabSheets einer PageControl, deren TabSheets wärend der Laufzeit erzeugt werden.
Beim speichern soll natürlich der Inahlt der RichEdits in eine Datei gespeichert werden, deren TabSheet gerade aktiv ist.
Wie kann ich das RichEdit Feld der gerade aktuellen Page auswählen?
ich habe schon mit PageControl->ActivePage usw. rumprobiert, bekomme aber nur Fehlermeldungen.Der Thread zum PageControl/TabSheet Thema auf das ich mcih beziehe ist hier:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-108024.htmlMfG M
-
Moin, moin!
Ist die Nuss zu schwer zu knacken oder ist es zu einfach, dass keine antwortet?

Ich habe mir auch schon überlegt meine neu angelegten RichEdits in ein dynamisches Feld zu packen. Dynamisch, weil es es ja so viele TabSheets mit drauf platzierten RichEdits auf der PageControl geben kann, wie der Anwender es wünscht. Allerdings weiß ich da noch nicht wie ich an die Sache rangehen soll.
Prinzipiell müsste ich ja jedesmal das Feld um die hinzukomenden RichEdits vergrößern, wenn der Anwender auf "Neue Seite einfügen" klickt und das Feld genauso verkleinern, wenn der Anwender das TabSheet schließt. Das ist natürlich etwas aufwendig, daher wäre mit eine Lösung, wei ich so an die RichEdits rankomme lieber.Falls doch noch jemdand hier liest und nicht weiß wie ich es meine würde ich den Quzelltext auch per E-mail zur Ansicht verschicken.
MfG Martin
-
macsmac schrieb:
Wie kann ich das RichEdit Feld der gerade aktuellen Page auswählen?
Durch das Controls-Array der ActivePage iterieren und nach TRichEdit casten. Siehe FAQ, "Komponenten - Zugriff nicht über Namen".
PS.
In Zukunft bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema. Danke!