![]() |
Prblem bei erstellen einer txt datei
Hallo,
hab jetzt ma versucht, ein Programm zu schreiben bei dem man Notizen in eine Checklistbox machen kann. Das funktioniert auch alles aber ich möchte, das wenn man das Programm beedet und dann wieder startet das man die Notizen wieder hat. Außerdem soll das Programm die beim schließen automatisch in eine .txt datei schreiben. das sieht bis jetzt so aus:
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var i:integer; sl:TStringList; begin sl := TStringList.Create; try for i := 0 to CheckListBox1.Items.Count - 1 do begin if (CheckListBox1.Checked[i] = true) then sl.Add(CheckListBox1.Items[i]); end; finally sl.SaveToFile(sDir + '\Notes.txt'); \\sDir ist der Pfard in dem das Programm ist! (sDir:=GetCurrentDir;) sl.Free; end; end; er erzeugt zwar eine Text datei aber schreibt nichts in sie. und wie man die dann wieder ausliest weiss ich leider auch nich...hoffe ihr habt nen paar tipps für mich! |
Re: Prblem bei erstellen einer txt datei
Liste der Anhänge anzeigen (Anzahl: 1)
EDIT: ist in der CheckListBox überhaupt was drin, was gespeichert werden kann?
|
Re: Prblem bei erstellen einer txt datei
ja hab vorher immmer was eingetrage....
|
Re: Prblem bei erstellen einer txt datei
Dann debuge doch mal diese Prozedur und schau was Delphi da macht, bzw.warum es da etwas nicht macht.
Zitat:
Delphi-Quellcode:
if CheckListBox1.Checked[i] then
|
Re: Prblem bei erstellen einer txt datei
Oder probier das ganze mal bei OnCloseQuery und nicht bei OnClose. Vielleicht hilft das ja, weil eigentlich müsste der Code schon stimmen :gruebel:
|
Re: Prblem bei erstellen einer txt datei
na gut das läuft jetzt nur jetzt hab ich ein anderes problem:
ich will das alle abgehackten notizen (checked=true) beim schließen gelöscht werden und danach eingetragen und gespeichert wier: ABER WAS MACHE ICH HIER FALSCH DAS DER IMMER ABSCHMIERT ANSTATT ZU BEENDEN UND ZU SPEICHER:
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i: integer; sl: TStringList; begin sl := TStringList.Create; try for i := Pred(CheckListBox1.Items.Count) downto 0 do begin if CheckListBox1.Checked[i]=true then CheckListBox1.Items.Delete(i) else sl.Add(CheckListBox1.Items[i]); end; finally sl.SaveToFile(sDir + '\Notes.txt'); sl.Free; end; Form1.Close; end; |
Re: Prblem bei erstellen einer txt datei
ABSCHMIERT ist keine Fehlerbeschreibung!
Was passiert (Fehlermeldung) und wo passiert es. Auch hier hilft oftmals ordentliches Debugen! sl.SaveToFile gehört vor das Finally, denn tritt dort eine Exception auf, weil z.B. nicht gespeichert werden konnte, dann wird SL nicht freigegeben. Form1.Close in OnClose? Ich den die Form wurde schon geschlossen? Und ganz interessant: Warum willst du die Einträge löschen, wo die Form doch eh grad geschlossen und womöglich gleich gelöscht wird? Und ws soll bitte dieses GROßGESCHREIBE bringen? (auf mich wirkt es so, als wenn ich angeschrieen werde) |
Re: Prblem bei erstellen einer txt datei
Ich würde vermuten, dass es gar nicht kompiliert, aufgrund dieser schönen Zeile:
Code:
sollte das nicht vielleicht
sl.Add(CheckListBox1.Items[i]);
Code:
oder .Caption am Ende heißen?
sl.Add(CheckListBox1.Items[i].Text);
HTH.. |
Re: Prblem bei erstellen einer txt datei
also fangen wir mal an:
es gibt keine Fehlermeldung sondern der Taskmanager meint keine Rückmeldung und meine CPU ist bei 90-100%(beide) auslastung (duel core 3ghz pro kern)
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i: integer; sl: TStringList; begin sl := TStringList.Create; try for i := Pred(CheckListBox1.Items.Count) downto 0 do begin if CheckListBox1.Checked[i]=true then CheckListBox1.Items.Delete(i) else sl.Add(CheckListBox1.Items[i]); end; sl.SaveToFile(sDir + '\Notes.txt'); finally sl.Free; end; Form1.Close; end; muss dat sl.savefile da wos jetzt ist hin? in die schleife kanns ja eigentlich nich gehören... |
Re: Prblem bei erstellen einer txt datei
Hat sich mal einer meinen VORSCHLASG angesehen?
Das funktioniert nämlich. Davon abgesehen, du solltest die erstmal die Basics ansehen, bevor du irgentwelche Funktionen wie pred verwendest. Hättets du die die Basics auf ![]() |
Re: Prblem bei erstellen einer txt datei
ja hab angesehen und versuche das gerade bei mir einzubauen nur du siehst ja welche fehler da auftauchen warum auch immer...
|
Re: Prblem bei erstellen einer txt datei
Zitat:
und genau sowas fällt beim Debuggen auf :warn:
Delphi-Quellcode:
OnClose (diese Prozedur) wird aufgerufen
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin .. Close; end; Close ruft ebenfalls Diese (sich selber) auf = Endlosschleife und dann nochwas: =true oder =false nutzt man NIE zum vergleichen/prüfen die globale Objektvariable (hier Form1) nutzt man NIE innerhalb des Objektes selber |
Re: Prblem bei erstellen einer txt datei
Zitat:
|
Re: Prblem bei erstellen einer txt datei
was nutze ich denn anstelle von =true = false?
gut DANKE für den tipp mit der endlosschleife geht ohne die :oops: und das programm läuft jetzt auch so wie es laufen soll...DANKE AN ALLE :thumb: |
Re: Prblem bei erstellen einer txt datei
michael habe bei mir auch was geändert um das an mein programm anzupassen...hab aber etwas falsch gemacht !
hatte ausversehen endlosschleife drin.... :oops: |
Re: Prblem bei erstellen einer txt datei
Weil du wahrscheinlich eine Endlosschleife programmiert hast :)
Man macht keine for-Schleifen über Listen, deren Elemente in der for-Schleife gelöscht werden. Irgendwann greift die Laufvariable ins Leere. Das löst man besser mit while. (So als Anmerkung) :warn: |
Re: Prblem bei erstellen einer txt datei
Zitat:
Delphi-Quellcode:
Grüße, Matze
// true
if CheckListBox1.Checked[i] then // false if not CheckListBox1.Checked[i] then |
Re: Prblem bei erstellen einer txt datei
Zitat:
|
Re: Prblem bei erstellen einer txt datei
Will man alle Einträge einer Liste löschen, ist while ideal:
Delphi-Quellcode:
Will man nur Einträge löschen, die einer bestimmten Bedingung genügen dann ergäbe eine for-Schleife (im Mindestfall) falsche Ergebnisse.
while Liste.Count > 0 do Liste.Delete(0);
Beispiel:
Delphi-Quellcode:
Angenommen, die Liste hat 5 Einträge (0..4) und Eintrag 2 erfüllt die Bedingung. Dann würde er gelöscht und Eintrag 3 würde zu 2 und 4 zu 3. Die Laufvariable i wird aber erhöht und prüft als nächstes Liste[3], die ja vorher die 4 war. Die eigentliche ursprüngliche 3 wird gar nicht mehr geprüft, sondern "übersprungen".
for i:=0 to Liste.Count-1 do begin
if Liste[i]=Bedingung then Liste.Delete(i); end; Das sind so die kleinen Stolpersteine, die einen dann ins Grübeln bringen :) |
Re: Prblem bei erstellen einer txt datei
@Progman: darum läßt man in soeinem Fall die Schleife rückwärts laufen,
so wie es auch schon gemacht wurde.
Delphi-Quellcode:
Dann gibt es dieses Problem auch nicht.
for i := Pred(CheckListBox1.Items.Count) downto 0 do
Beim Vorwärtslaufen gibt es 2 Probleme: - Delphi merkt sich das Ende der schleife und fragt dieses nur einmal ab drum kann man da auch über das Listenende hinausgeraten, wenn die Liste kürzer wird - wird etwas gelöscht, dann wird der nächste Index übersprungen, da er ja nun den selben Index bekommen hat |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 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 by Thomas Breitkreuz