![]() |
10 Richedit in eine Datei speichern und wieder auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Ich möchte ein Programm das 10 Richeditfelder (in einen Menü kann man wählen in welchen man schreiben will) hat. Den inhalt soll man dann in eine Datei Speichern können. In der Datei soll pro Zeile der Inhalt eines Richeditfeldes stehen. Das Programm habe ich schon geschrieben (nur schnell) aber es ist ein Fehler drinn den ich nicht finde.... Wenn ich einmal Speicher dann gehts, aber wenn ich nochmal speicher dann nicht mehr und ich weiß nicht warum.... könnt ihr euch das Programm mal anschauen, bitte die Programmierung nicht ändern sondern nur den Fehler suchen es ist nämlich ein Teil aus einen größeren Programm... DANKE! Ferby |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Zitat:
Poste die relevanten Codeteile und sag uns was nicht klappt bzw. was für ein Fehler kommt. |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Hi,
Das Programm ist sehr kurz und ich weiß nicht in welchen codeteil der Fehler ist. Wenn ich Abspeicher das Programm lade dann geht noch alles aber wenn ich jetzt nochmal auf speichern gehe und das programm neu öffne dann verschwinden zeilen und in der text datei verrutschen zeilen, ich weiß nicht warum... |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Wenn's so kurz ist, dann poste es doch hier. :) (P.S. die exe nächstes mal nicht mitpacken, dein armer modemuser)
Wenn du mal in deine Textdatei schaust, dann siehst du, das es richtig gespeichert wird. Also genügt es die Procedure fürs Öffnen hier zu posten. So z.B.:
Delphi-Quellcode:
Dann vielleicht etwas übersichtlichere Namen. (waserwillhier waserwilldort waserwilldennüberhaupt....)
var
Form1: TForm1; waserwillrichedits: array [1..10] of TRichedit; textdatei:textfile; ... procedure TForm1.Button1Click(Sender: TObject); var i,i2:integer; waserwillvar:ansistring; begin assignfile(textdatei, 'test.txt'); // Richeditfelder werden geladen reset(textdatei); for i:=1 to 10 do begin readln(textdatei,waserwillvar); for i2:=1 to length(waserwillvar) do if waserwillvar[i2]=#1 then waserwillvar[i2]:=#10; waserwillrichedits[i].text:=waserwillvar; end; closefile(textdatei); end; So und jetzt schauen wa mal drüber... |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Hallo,
Ich finde keinen Fehler...... |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Wieso so kompliziert? :D
Laden:
Delphi-Quellcode:
Speichern:
for i:=1 to 10 do readln(textdatei,waserwillrichedits[i].text);
Delphi-Quellcode:
for i:=1 to 10 do writeln(textdatei,waserwillrichedits[i].text);
|
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Hallo,
ALso wirklich wie soll das gehen? Wenn im 1 Richedit jetzt zwei Zeilen stehen dann stehen zwei Zeilen in der txt Datei, wenn ich jetzt wieder Lade dann steht die erste Zeile der Textdatei im Richedit1 und die zweite im Richedit2.... |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Moin ferby,
Zitat:
Warum speicherst Du nicht in einen FileStream. Erst die Länge des Feldes, dann den Inhalt. |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Hallo,
Kannst du mir da ein Besipiel geben, ich wüßt wie ich das mit einen richedit mach aber nicht mit 10 in einer Datei???? Frohe Weinachten an alle, Ferby |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Du bastelst dir nen Dateiheader, bestehend aus 10 Integer.
Dann speicherst du die Längen der RichtEdit Felder im Header. Danach kommt nacheinander einfach der Inhalt der RichEdits. Beim auslesen: Header auslesen. Auf Grund der Größen die RichEdits auslesen. edit: Alternativ statt Header eine eigene Datei, wo die Längen drin stehen. |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Hi,
Also ich weiß nicht ob das so einfacher ist als meine Variante... ich schau mal ob ich auf den Fehler bei Variante finde und wenn nicht probier ich deine aus. |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Moin Ferby,
das könnte so aussehen, wenn Du nur den Text haben willst:
Delphi-Quellcode:
Nachdem Du den Wert ausgelesen/geschrieben hast, steht der FileStream auf der Länge des nächsten Eintrages.
// schreiben
var iLen : integer; fs : TFileStream; begin fs := TFileStream.Create(....); try iLen := length(RichEdit1.Lines.Text); fsWrite(iLen,4); fs.Write(RichEdit1.Lines.Text[1],iLen); finally FreeAndNil(fs); end; end; // lesen var iLen : integer; fs : TFileStream; sBuf : string; begin fs := TFileStream.Create(...,fmOpenRead); try fs.Read(iLen,4); SetLength(sBuf,iLen); fs.Read(sBuf[1],iLen); RichEdit1.Lines.Text := sBuf; finally FreeAndNil(fs); end; end; Du kannst also das, was zwischen try/finally steht der Reihe nach für alle RichEdits ausführen. Sollen auch die Formatierungen gespeichert werden wird's etwas komplizierter:
Delphi-Quellcode:
// schreiben
var iLen : integer; fs : TFileStream; ms : TMemoryStream; begin ms := TMemoryStream.Create; fs := TFileStream.Create(....,fmCreate); try ms.Clear; RichEdit1.Lines.SaveToStream(ms); iLen := ms.Position; fs.Write(iLen,4); fs.CopyFrom(ms,0); finally FreeAndNil(fs); FreeAndNil(ms); end; end; // lesen var iLen : integer; fs : TFileStream; ms : TMemoryStream; begin ms := TMemoryStream.Create; fs := TFileStream.Create('c:\temp\riform.txt',fmOpenRead); try fs.Read(iLen,4); ms.Clear; ms.CopyFrom(fs,iLen); ms.Position := 0; RichEdit1.Lines.LoadFromStream(ms); finally FreeAndNil(fs); FreeAndNil(ms); end; end; |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Das ist mir viel zu kompliziert, ich möchte nur Befehle verwenden die ich auch verstehe.... Ich habe jetzt alles nochmal geschrieben und zwar nach einen anderen prinizp. Kann sich das wer mal anschauen, es funktioniert auch, nur Zeilenumbrüche werden gelöscht... warum???? Das Programm ist ganz kelein, es nimmt euch nur ganz wenig von eurer kostbaren Zeit weg :-) |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Ein Zeilenumbruch ist #13#10 unter Windows. #01 ist das Steuerzeichen für "Start of Header".
Btw. sieht mir dein Quellcode reichlich kompliziert aus. |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Hallo,
Das weiß ich, wo muss ich das #10 einfügen damit es geht, ich habe es auf verschiedenen stellen ausproiert nur dan funktionieren auf einmal andere dinge nicht mehr......... |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Warte ich schreibe es dir gerade.
|
Re: 10 Richedit in eine Datei speichern und wieder auslesen
So in etwa:
Delphi-Quellcode:
var
Form1 : TForm1; RichEditArray: array[0..2] of TRichedit; implementation {$R *.dfm} procedure SaveRichtEdit(RichEdit: TRichEdit; const Filename: string); var sl : TStringList; begin sl := TStringList.Create; try if FileExists(Filename) then sl.LoadFromFile(Filename); sl.Add(RichEdit.Text); sl.SaveToFile(Filename); finally FreeAndNil(sl); end; end; procedure LoadRichEdits; var Filename : string; sl : TStringList; i : Integer; begin Filename := ExtractFilePath(ParamStr(0)) + 'test.txt'; if FileExists(Filename) then begin sl := TStringList.Create; try sl.LoadFromFile(Filename); for i := 0 to Min(length(RichEditArray), sl.Count) - 1 do begin RichEditArray[i].Text := sl.Strings[i]; end; finally FreeAndNil(sl); end end; for i := 0 to length(RichEditArray) - 1 do RichEditArray[i].Visible := True; end; procedure TForm1.FormCreate(Sender: TObject); var i : integer; begin for i := 0 to length(RichEditArray) - 1 do begin RichEditArray[i] := TRichedit.Create(Self); RichEditArray[i].Parent := Self; RichEditArray[i].SetBounds(100, 10, 550, 250); RichEditArray[i].Visible := False; end; end; procedure TForm1.speichernClick(Sender: TObject); var Filename : string; i : Integer; begin Filename := ExtractFilePath(ParamStr(0)) + 'test.txt'; if FileExists(Filename) then begin if not DeleteFile(Filename) then ShowMessage(SysErrorMessage(GetLastError)) else for i := 0 to length(RichEditArray) - 1 do SaveRichtEdit(RichEditArray[i], Filename); end; end; procedure TForm1.waserwillmenueClick(Sender: TObject); var i : Integer; begin for i := 0 to length(RichEditArray) - 1 do RichEditArray[i].Visible := False; RichEditArray[waserwillmenue.ItemIndex].Visible := True; end; procedure TForm1.ladenClick(Sender: TObject); var i : Integer; begin speichern.Visible := True; LoadRichEdits; for i := 0 to length(RichEditArray) - 1 do RichEditArray[i].Visible := True; end; |
Re: 10 Richedit in eine Datei speichern und wieder auslesen
Hallo,
Danke werde ich später ausprobieren habe jetzt leider keine Zeit mehr.... das Christkind kommt muss gucken gehen :shock: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz