![]() |
AW: Elemente aus TStringList in Laufzeit entfernen
Hmm..
Zitat:
Delphi-Quellcode:
(Ungetestet, nur so hingeschrieben ;) )
procedure LoadVocab(VokabelListe : TList<TVocab>);
var tmpVocabulary : TStringList; Vocab : TVocab; begin try tmpVocabulary:= TStringList.Create; tmpVocabulary.LoadFromFile('Vocabulary.txt'); for i := 0 to Vocabulary.Count - 1 do begin Vocab := TVocab.Create; Vocab.SolvedCount := 0; Vocab.German := tmpVocabulary.Names[i]; Vocab.English := tmpVocabulary.ValueFromIndex[i]; VokabelListe.Add(Vocab); end; finally tmpVocabulary.Free; end; end; @KetchUp Oder wenn Du unbedingt mit der StringList weiter arbeiten möchtest, dann solltest Du dir erstmal über einen grundsätzlichen Ablauf klar sein.. z.B.: FormCreate -> Laden der Vokabelliste in die StringList Im (wahrscheinlich) ButtonClick -> Prüfen/Arbeiten MIT der Stringliste -> Nicht wieder neu laden, wozu auch, ist ja bereits FormClose -> Mit .Free die Stringliste wieder freigeben (aufräumen!!) |
AW: Elemente aus TStringList in Laufzeit entfernen
Ich möchte es erstmal mit der TStringList Variante probieren. Das Programm muss auch noch ein paar andere Sachen können wie zum Beispiel die Lernrichtung (Deutsch>Englisch oder Englisch>Deutsch) ändern.
Deswegen sieht mein Ansatz jetzt so aus:
Delphi-Quellcode:
Nachdem alle Vokabeln (in dem Fall) einmal richtig waren, soll ein neues Fenster geöffnet werden. Aber genau an der Stelle stürzt das Programm immer ab. Wo muss ich Vocabulary.Free; platzieren damit das funktioniert?
Begin
If Vocabulary.Count > 0 Then Begin If GermanEnglish = True Then Begin Input:= E_UserGuess.Text; E_UserGuess.Text:= ''; Answer:=AnsiCompareStr(Vocabulary.Names[RandomNumber], Input); If Answer=0 Then Begin L_CorrectAnswer.Caption:=''; Img_FeedBack.Picture.Bitmap.Assign(jpgCorrect); //jpgCorrect.free; Vocabulary.Delete(RandomNumber); End Else Begin L_CorrectAnswer.Caption:='Deine Antwort: '+(Input)+' '+'Richtige Antwort: '+(Vocabulary.ValueFromIndex[RandomNumber]); Img_FeedBack.Picture.Bitmap.Assign(jpgWrong); //jpgWrong.free; End; RepetitionCheck:=RandomNumber; While RepetitionCheck = RandomNumber Do RandomNumber:=random(Vocabulary.Count); try L_UnknownWord.Caption:= Vocabulary.ValueFromIndex[RandomNumber]; L_RemainingWords.Caption:= 'Verbleibende Vokabeln: '+IntToStr(Vocabulary.Count); L_RemainingWords.Font.Name:='Helvetica LT Std'; L_RemainingWords.Font.Size:= 16; L_RemainingWords.Font.Color:= RGB(170,220,70); finally end; end Else Begin Input:= E_UserGuess.Text; E_UserGuess.Text:= ''; Answer:=AnsiCompareStr(Vocabulary.ValueFromIndex[RandomNumber], Input); If Answer=0 Then Begin L_CorrectAnswer.Caption:=''; Img_FeedBack.Picture.Bitmap.Assign(jpgCorrect); jpgCorrect.free; Vocabulary.Delete(RandomNumber); End Else Begin L_CorrectAnswer.Caption:='Deine Antwort: '+(Input)+' '+'Richtige Antwort: '+(Vocabulary.Names[RandomNumber]); Img_FeedBack.Picture.Bitmap.Assign(jpgWrong); jpgWrong.free; End; RepetitionCheck:=RandomNumber; While RepetitionCheck = RandomNumber Do RandomNumber:=random(Vocabulary.Count); try L_UnknownWord.Caption:= Vocabulary.Names[RandomNumber]; L_RemainingWords.Caption:= 'Verbleibende Vokabeln: '+IntToStr(Vocabulary.Count); L_RemainingWords.Font.Name:='Helvetica LT Std'; L_RemainingWords.Font.Size:= 16; L_RemainingWords.Font.Color:= RGB(170,220,70); finally //Vocabulary.Free; end; End; End Else Begin Form3 := TForm3.Create(self); try Form3.ShowModal; finally Form3.Free; Vocabulary.Free; end; End; End; |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Wo erstellst Du die Liste ubd wo lädst Du die Liste? Im FormCreate? Dann gehört das Vocabulary.Free ins FormDestroy. Sinnvollerweise solltest Du die Liste beim Programmstart erstellen (unabhängig davon ob Du sie dort sofort lädst oder erst später). Freigeben solltest Du sie dann beim Programmende. Wenn Du sie unbedingt leeren möchtest, so kannst Du an der Stelle, an der momentan das Vocabulary.Free steht, ein Vocabulary.Clear aufrufen. Dann wird die Liste geleert, aber nicht zerstört. |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Delphi-Quellcode:
Sobald die Bedingung nicht mehr erfüllt ist stürzt er aber ab. Er kommt garnicht dazu die Prozedur FormDestroy aufzurufen.
If Vocabulary.Count > 0 Then
//mach was Else Begin FormDestroy(Vocabulary); End; |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Und wenn du es schon komplizierter machst als es sein muss und ehrlich gesagt auch irgendwie falsch, dann entferne wenigstens diesen einen Fehler hier. Alle anderen kannst du drin lassen denn sonst bleibt kein Code mehr übrig.
Delphi-Quellcode:
If GermanEnglish = True
|
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Das reicht auf True muss man nicht prüfen..
Delphi-Quellcode:
If GermanEnglish then
oder
Delphi-Quellcode:
If not GermanEnglish then
anstelle von
Delphi-Quellcode:
If GermanEnglish = false then
gruss |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
|
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Die Liste in Deiner oben geposteten Routine freizugeben ist schlicht und einfach (bei der jetztigen Form der Implementierung) unsinnig und absolut kontraproduktiv. Lass es doch bitte einfach endlich weg. Bitte poste mal den vollständigen Quelltext, den Du bisher geschrieben hast. Mit den Fragmenten ist es nur ein Rumgestocher, wo welcher Fehler herkommen könnte und wie man ihn beheben könnte, wenn man die Abhängigkeiten innerhalb des gesamten Programmes nicht kennt. |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
sorry das musste sein. gruss |
AW: Elemente aus TStringList in Laufzeit entfernen
Oder der Willen, es endlich mit den Klassen zu machen. Dann braucht er die SttringListe, seinen Gegner, nur noch einmalig beim Programmstart.
Ich habe vor 10 Jahren auch mal einen Vokabeltrainer gemacht und der baute auch auf StringListen auf, weil ich damals nix anderes kannte. Sei doch froh, dass dir hier direkt ein sehr viel besserer Weg vorgeschlagen wird. Der ist nicht nur für dich besser, sondern auch für deine Zensur. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 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