Autor |
Beitrag |
nanashi
      
Beiträge: 31
|
Verfasst: Mi 17.03.10 21:33
Hallo.^^
Mein Problem müsste eigentlich ganz simpel sein und vllt zu simpel für mich um den Fehler zu finden. >.<
Ich habe zwei ListBoxen und in ListBox1 stehen Wörter. Mit einer Procedure kopiere ich nun ein markiertes Wort von ListBox1 in ListBox2.
Eine weitere Procedure (über einen anderen button) soll nun diese Wörter aus ListBox2 in eine txt-datei speichern.
Klingt sehr einfach... so dachte ich mir das zumindest..
Die leere txt-datei wurde zu Beginn durch oncreate eingelesen:
Delphi-Quelltext 1:
| ListBox2.Items.LoadFromFile('Auswahl.txt'); |
das hat auch funktiniert. ich hab das getestet indem ich einfach mal vorher was in die txt reingeschrieben hab. keine probleme.
Die Procedure zum kopieren in die andere ListBox:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.BitBtn7Click(Sender: TObject); var Position2:Integer; begin Position2:=ListBox2.Items.Add(ListBox1.Items.Strings[ListBox1.ItemIndex]); ShowMessage('Eingefügt an Position'+IntToStr(Position2+1)); ListBox2.Sorted:=True; end; |
Die Procedure zum speichern in die txt-datei:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.BitBtn11Click(Sender: TObject); begin ListBox2.Items.SaveToFile('Auswahl.txt'); end; |
Das Ergebnis des drückens dieses Buttons ist allerdings nun: 1. er speichert die Wörter nicht in die txt-data
2. er schließt das Programm einfach und gibt
keine Fehlermeldung aus
Kann mir jemand bitte sagen woran das liegt? Das ist zum verzweifeln find ich.. ohne Fehlermeldung weiß ich nicht mal was er zu meckern hat.
Achja.. ich nutze Delphi 7.
Lg nanashi
Moderiert von Christian S.: Delphi-Tags hinzugefügtModeriert von Christian S.: Topic aus Algorithmen, Optimierung und Assembler verschoben am Mi 17.03.2010 um 21:48
|
|
Georg08
      
Beiträge: 155
Erhaltene Danke: 6
Win XP
Delphi 7.0 Personal
|
Verfasst: Mi 17.03.10 21:39
Hallo
eristens:
Delphi-Quelltext
zweitens:
Ich habe es jetzt mal versucht mit 3 Buttons eienr Listbox und einem Editfeld:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.LadenClick(Sender: TObject); begin Listbox1.Items.LoadFromFile('liste.txt'); end;
procedure TForm1.SpeichernClick(Sender: TObject); begin Listbox1.Items.SaveToFile('liste.txt'); end;
procedure TForm1.HinzufuegenClick(Sender: TObject); begin Listbox1.Items.Add(Edit1.Text) end; |
funktioniert...
|
|
huuuuuh
      
Beiträge: 665
Erhaltene Danke: 19
win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
|
Verfasst: Mi 17.03.10 21:39
hab schon länger nicht mehr mit delphi gearbeitet, aber SaveToFile benötigt mehr vom dateipfad. glaube ich.
also so:
Delphi-Quelltext 1:
| ListBox2.Items.SaveToFile(ExeFilePath+'\Auswahl.txt'); |
probiers mal aus, wüsste selber gern ob so geht 
|
|
nanashi 
      
Beiträge: 31
|
Verfasst: Mi 17.03.10 21:46
@huuuuh: bei deiner Variante kommt: Undefinierter Bezeichner: 'ExeFilePath'
es muss eigentlich gehen deshalb war ich auch so überrascht ich lade und speichere öffter mal in dem Programm etwas aus und ein, genauso wie Georg es beschrieben hat... nur hier macht er irgendwie fachsen.
Könnte es daran liegen, dass die txt vorher leer ist?
|
|
Georg08
      
Beiträge: 155
Erhaltene Danke: 6
Win XP
Delphi 7.0 Personal
|
Verfasst: Mi 17.03.10 21:53
bei meinem Beispiel habe ich die "liste.txt" vom Programm erzeugen lassen, Ohne Pfad...
@ nanashi:
Kannst du bitte Mal mehr von dem Code zeigen...
Im Anhang mal das kleine Programm...
|
|
nanashi 
      
Beiträge: 31
|
Verfasst: Mi 17.03.10 21:59
hmm jetzt macht er es
ich habe jetzt geschrieben:
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.BitBtn11Click(Sender: TObject); begin ListBox2.Sorted:=true; ListBox2.Items.SaveToFile('Auswahl.txt'); end; |
ich finde es wirklich sehr seltsam, dass er es erst macht, wenn ich vorher schonma drauf zugegriffen habe o.o
da is doch was faul
& was willst du beim code den sehen..
also mein oncreate sieht so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.FormCreate(Sender: TObject); var Liste1: TStringList; i:integer; begin Edit5.text := 'englische Vokabel:'; Edit6.text := 'deutsche Vokabel:'; Deutsch := 'Deutsch'; Englisch := 'Englisch'; Japanisch := 'Japanisch'; Koreanisch := 'Koreanisch'; Liste1:=TStringList.create; Liste1.LoadFromFile('Vokabeleng.txt'); ListBox2.Items.LoadFromFile('Auswahl.txt'); i:=0; while i < Liste1.count do begin; ListBox1.Items.Add(Liste1[i]); i:=i+1; end; ListBox1.Sorted:=True; end; |
|
|
nanashi 
      
Beiträge: 31
|
Verfasst: Mi 17.03.10 22:08
@Georg: da bei deinem anhang kommt "Der ausgewählte Dateianhang existiert leider nicht.".. könntest du bitte den code schreiben wie du im programm die txt erzeugen hast? danke^^
dann würde ich es nämlich mal auf deine variante probieren
|
|
Georg08
      
Beiträge: 155
Erhaltene Danke: 6
Win XP
Delphi 7.0 Personal
|
Verfasst: Mi 17.03.10 22:17
tut mir leid, der dateianhang war falsch hier der neue
Einloggen, um Attachments anzusehen!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 17.03.10 22:32
Delphi-Quelltext 1: 2:
| Liste1.LoadFromFile('Vokabeleng.txt'); ListBox2.Items.LoadFromFile('Auswahl.txt'); |
Und wo denkst du speichert dir dein Programm die Dateien ab bzw. sucht sie zum Laden?
|
|
nanashi 
      
Beiträge: 31
|
Verfasst: Mi 17.03.10 22:32
danke. hmm also ich hab mir das jetzt bestimmt 6 ma durchgelsen & das ist wirklich wies im buche steht.^^
nur sobald ich das vorher ma nicht sortiere an der stelle macht er es wieder nicht. hab es gerade probiert. >.<
naja ich würd sagen ich lass dann einma diese unnötige zeile mit sorted drin und dafür gehts dann... komisch ist es trotzdem.. wer weiß vllt hats einfach nurn schlechten tag
ich hätte vllt noch erwähnen sollen, dass ich delphi 7 auf vista nutze.. fällt mir grad so auf.. vllt kommts deshalb zu ungereimtheiten.. ich hab zwar vorher das system manuel schon drauf eingestellt gehabt aber vllt arbeitet es doch noch nich optimal
bevor die frage vllt kommt.. ich habs so gemacht wie in dem forum beschrieben:
forum.delphi-treff.d...owthread.php?t=20038
aber danke für deine mühen ^___^
--- Moderiert von Narses: Beiträge zusammengefasst---
o.o worauf willst du hinaus lukie?
ich hab die txt´s alle in dem ordner wo auch das projekt drin is o.o
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 17.03.10 22:43
Und Windows kann hell sehen und weiß welcher Ordner gemeint ist? Dass die Dateien gefunden werden ist purer Zufall. Lege mal eine Verknüpfung zu deiner Exe an, gib ein anderes Arbeistverzeichnis an und guck, was passiert.
|
|
nanashi 
      
Beiträge: 31
|
Verfasst: Fr 19.03.10 07:37
Naja aber ich brauch doch eigentlich nur eine Verknüpfung, wenn ich die txt´s woanders speichere als das Projekt, also in einem anderen Ordner, Laufwerk etc. und es nicht im selben Ordner liegt wie auch das Projekt und alle anderen Dateien für das Programm. Lieg ich damit falsch, oder hab ich dich nur falsch verstanden?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 19.03.10 19:58
Und was, wenn der Benutzer sich eine Verknüpfung anlegt und was ändert? Des weiteren passiert das Gleiche, wenn du einen Öffnen-Dialog hast und beim Auswählen einer Datei das Verzeichnis wechselst. Und wenn du Pech hast, ändert ein fremdes Programm das Arbeitsverzeichnis. Und dann such mal beim Kunden nach dem Fehler -- viel Spass.
Warum sich mögliche Problem künstlich aufhalsen, wenn man sie ganz einfach vermeiden kann? Das werde ich nie verstehen. 
|
|
nanashi 
      
Beiträge: 31
|
Verfasst: Fr 19.03.10 22:41
ok wenn man das so weit sieht, hast du wahrscheinlich recht.
Also ich kenne bis jetzt 2 Varianten:
1. die, die ich genutzt habe.. sprich einfach durch 'Auswahl.txt' aufrufen, da es im selben Ordner gespeichert ist
2. das ganze über
Delphi-Quelltext 1:
| ListBox2.Items.SaveToFile('C:/Delphi/Arbeit mit Aurora/ed/Auswahl.txt'); |
Welches von denen würdest du nun nehmen, also erstens hab ich gemerkt nicht.
Oder würdest du sogar noch eine 3te oder 4te Variante nutzen??
Gib mir mal bitte ein Scriptbeispiel wie man das deiner Meinung nach am besten programmieren sollte.^^
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 19.03.10 22:56
Also deine zweite Lösung ist fast noch schlechter als deine erste. Deine erste hat zumindest noch eine Chance, dass sie auf anderen Rechnern funktioniert. Bei der zweiten dürfte sie fast gegen null gehen, weil zum einem das Verzeichnis bei mir mit Sicherheit nicht existiert und man als normaler Benutzer unter C keine Schreibrechte hat.
Wenn es das Anwendungsverzeichnis sein muss, dann bitte mit ParamStr(0) ermitteln oder besser einen Öffnen-Dialog verwenden und dem Benutzer selber den Speicherort wählen lassen.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Fr 19.03.10 23:05
Warum verwendet man nicht das Anwendungsverzeichnis (also das verzeichnis in das man kommt wenn man im Explorer %APPDATA% eingibt)?
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
nanashi 
      
Beiträge: 31
|
Verfasst: Fr 26.03.10 18:14
Problem gelöst.^^ Hat ne Weile gedauert, aber jetz kenn ich den Fehler.
Ich habe das ganze jetzt mit 2 Button über OpenDialog und SaveDialog geregelt.
Das Problem war, dass dies nicht bei BitButton ausgeführt wird und er dann erst gar nicht zum Algorithmus kam, sondern gleich das ganze Programm abgebrochen hat. Ich musste also normale Button nehmen.
Scheint doch nicht immer das beste zu sein mit BitButton. >.< Schade die hab ich eigentlich gemocht.. kann man besser gestallten...
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 26.03.10 22:56
Dein Problem hat bestimmt nichts mit dem BitButton zu tun. Da bin ich mir ziemlich sicher. Denn was soll er anders machen als ein normaler Button, wenn auf ihn geklickt wird? Er löst genauso das OnClick Ereignis aus.
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 27.03.10 00:02
Vermutlich war bei dem TBitBtn schlicht Kind bzw. damit ModalResult gesetzt, so dass das Formular eben geschlossen wird...
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: Sa 27.03.10 15:39
nanashi hat folgendes geschrieben : | Problem gelöst.^^ Hat ne Weile gedauert, aber jetz kenn ich den Fehler.
Ich habe das ganze jetzt mit 2 Button über OpenDialog und SaveDialog geregelt.
Das Problem war, dass dies nicht bei BitButton ausgeführt wird und er dann erst gar nicht zum Algorithmus kam, sondern gleich das ganze Programm abgebrochen hat. Ich musste also normale Button nehmen.
Scheint doch nicht immer das beste zu sein mit BitButton. >.< Schade die hab ich eigentlich gemocht.. kann man besser gestallten... |
Diese Antwort läßt darauf schließen, dass Du das Problem mit den Dateipfaden nicht wirklich verstanden hast. Was bitte sollen den Buttons oder BitBtn mit Problemen im Filesystem zu tun haben?
_________________ Salus populi suprema lex esto
|
|