AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Elemente aus TStringList in Laufzeit entfernen

Ein Thema von KetchUp · begonnen am 16. Nov 2018 · letzter Beitrag vom 25. Nov 2018
Antwort Antwort
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
981 Beiträge
 
Delphi 6 Professional
 
#1

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 17. Nov 2018, 15:55
Hmm..

Delphi-Quellcode:
Begin
      Input:= E_UserGuess.Text;
      E_UserGuess.Text:= '';

// Hier greifst Du auf Vocabulary zu. Wann wurde dort etwas reingeladen?
      Answer:=AnsiCompareStr(Vocabulary.Names[RandomNumber], Input);

          RepetitionCheck:=RandomNumber;
          While RepetitionCheck = RandomNumber Do RandomNumber:=random(WordCount);

          try
// Hier wird Vocabulary 'Überschreiben'
            Vocabulary:= TStringList.Create;
            Vocabulary.LoadFromFile('Vocabulary.txt');
            L_UnknownWord.Caption:= Vocabulary.ValueFromIndex[RandomNumber];
            finally
// Hier wird Vocabulary 'weggeschmissen
            Vocabulary.Free;
          end;

    end

Siehe meine Kommentare..

Woher kommt beim ersten Zugriff auf Vocabulary der Inhalt und was meinst Du passiert beim nächsten Zugriff auf Vocabulary?
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#2

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 17. Nov 2018, 16:07
Zitat:
Woher kommt beim ersten Zugriff auf Vocabulary der Inhalt und was meinst Du passiert beim nächsten Zugriff auf Vocabulary?
Post 21 löst viele der Probleme
  Mit Zitat antworten Zitat
KetchUp

Registriert seit: 16. Nov 2018
31 Beiträge
 
#3

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 17. Nov 2018, 16:27
Post 21 löst viele der Probleme
Vielen Dank @ DieDolly für die ausführliche Erklärung.
Kann ich Vokabeln auch wieder aus der txt Datei laden, sodass man die ständig wechseln kann?


Delphi-Quellcode:
// Hier greifst Du auf Vocabulary zu. Wann wurde dort etwas reingeladen?
      Answer:=AnsiCompareStr(Vocabulary.Names[RandomNumber], Input);
Vocabulary wird in FormCreate erstellt. Aber es wird nicht an die Prozedur weitergegeben obwohl Vocabulary global deklariert ist.
Delphi-Quellcode:
     
            finally
// Hier wird Vocabulary 'weggeschmissen
            Vocabulary.Free;
          end;

    end
Oh, das wusste ich nicht. Was ist denn die genaue Funktion von ".Free" ?
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#4

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 17. Nov 2018, 16:29
Zitat:
Kann ich Vokabeln auch wieder aus der txt Datei laden, sodass man die ständig wechseln kann?
Wofür erneut aus der Textdatei laden?

Ich hab dir bei Eine zufällige englische Vokabel anzeigen doch gezeigt wie man eine Vokabel aus den Klassen lädt. Die Txt-Datei brauchst du nach Programmstart nur ein einziges mal laden. Danach nie wieder. Das ist ja der Sinn der Sache.
  Mit Zitat antworten Zitat
KetchUp

Registriert seit: 16. Nov 2018
31 Beiträge
 
#5

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 17. Nov 2018, 16:37
Zitat:
Kann ich Vokabeln auch wieder aus der txt Datei laden, sodass man die ständig wechseln kann?
Wofür erneut aus der Textdatei laden?
Ich meinte weil Du die Vokabeln direkt im Quellcode stehen hast. Die müssen variabel sein.


PS: Ich hab gerade das Problem gefunden. Es lag tatsächlich am .Free nach finally. Jetzt funktioniert es scheinbar.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#6

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 17. Nov 2018, 16:39
Zitat:
Die müssen variabel sein.
Du musst du ja auch selber reinladen. Das war nur ein Beispiel.
Du kannst 99% von meinem Code übernehmen. Du musst sie nur selber reinladen.

Ungefähr so

Delphi-Quellcode:
try
 Vocabulary:= TStringList.Create;
 Vocabulary.LoadFromFile('Vocabulary.txt');
 
 for i := 0 to Vocabulary.Count - 1 do
  begin
   Vocab := TVocab.Create;
   Vocab.SolvedCount := 0;
   Vocab.German := Vocabulary.Names[i];
   Vocab.English := Vocabulary.ValueFromIndex[i];
   VokabelListe.Add(Vocab);
  end;
finally
 Vocabulary.Free;
end;

Geändert von DieDolly (17. Nov 2018 um 16:57 Uhr)
  Mit Zitat antworten Zitat
KetchUp

Registriert seit: 16. Nov 2018
31 Beiträge
 
#7

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 17. Nov 2018, 16:48
Delphi-Quellcode:

finally
 Vocabulary.Free;
end;
Was hat denn das .Free am Ende für eine Bedeutung/Funktion?
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
981 Beiträge
 
Delphi 6 Professional
 
#8

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 17. Nov 2018, 18:49
Hmm..

Zitat:
Die müssen variabel sein.
Du musst du ja auch selber reinladen. Das war nur ein Beispiel.
Du kannst 99% von meinem Code übernehmen. Du musst sie nur selber reinladen.

Ungefähr so

Delphi-Quellcode:
try
 Vocabulary:= TStringList.Create;
 Vocabulary.LoadFromFile('Vocabulary.txt');
 
 for i := 0 to Vocabulary.Count - 1 do
  begin
   Vocab := TVocab.Create;
   Vocab.SolvedCount := 0;
   Vocab.German := Vocabulary.Names[i];
   Vocab.English := Vocabulary.ValueFromIndex[i];
   VokabelListe.Add(Vocab);
  end;
finally
 Vocabulary.Free;
end;
Umd das vielleicht noch zu verdeutlichen, schön in eine Ladeprocedure verpackt:

Delphi-Quellcode:
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;
(Ungetestet, nur so hingeschrieben )

@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!!)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 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