Delphi-PRAXiS
Seite 3 von 11     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Elemente aus TStringList in Laufzeit entfernen (https://www.delphipraxis.net/198592-elemente-aus-tstringlist-laufzeit-entfernen.html)

DieDolly 17. Nov 2018 14:24

AW: Elemente aus TStringList in Laufzeit entfernen
 
Heute will ich mal nett sein. Hier ein Beispiel mit generischer TList und Klasseninstanzen.
Gelöscht weil der TE sich nur für deine StringListe interessiert

Delphi.Narium 17. Nov 2018 14:39

AW: Elemente aus TStringList in Laufzeit entfernen
 
Stringlisten werden von 0 bis Count - 1 gezählt.

Bei drei Worten in der Stringliste darf WordCount daher nur 2 sein.

Maximalwert für WordCount = Anzahl der Wörter in der Liste - 1;

WordCount solltest Du nach dem Laden der Stringliste auf Stringliste.Count - 1 setzen und nicht irgendwo am Programmstart auf den vermutet richtigen Wert.

HolgerX 17. Nov 2018 15:55

AW: Elemente aus TStringList in Laufzeit entfernen
 
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?

DieDolly 17. Nov 2018 16:07

AW: Elemente aus TStringList in Laufzeit entfernen
 
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 :thumb:

KetchUp 17. Nov 2018 16:27

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

Zitat von DieDolly (Beitrag 1418330)
Post 21 löst viele der Probleme :thumb:

Vielen Dank @ DieDolly für die ausführliche Erklärung. :thumb:
Kann ich Vokabeln auch wieder aus der txt Datei laden, sodass man die ständig wechseln kann?

Zitat:

Zitat von HolgerX (Beitrag 1418329)

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.
Zitat:

Zitat von HolgerX (Beitrag 1418329)
Delphi-Quellcode:
     
            finally
// Hier wird Vocabulary 'weggeschmissen
            Vocabulary.Free;
          end;

    end

Oh, das wusste ich nicht. Was ist denn die genaue Funktion von ".Free" ?

DieDolly 17. Nov 2018 16:29

AW: Elemente aus TStringList in Laufzeit entfernen
 
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.

KetchUp 17. Nov 2018 16:37

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

Zitat von DieDolly (Beitrag 1418335)
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.

DieDolly 17. Nov 2018 16:39

AW: Elemente aus TStringList in Laufzeit entfernen
 
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;

KetchUp 17. Nov 2018 16:48

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

Zitat von DieDolly (Beitrag 1418340)
Delphi-Quellcode:

finally
 Vocabulary.Free;
end;

Was hat denn das .Free am Ende für eine Bedeutung/Funktion?

DieDolly 17. Nov 2018 16:49

AW: Elemente aus TStringList in Laufzeit entfernen
 
Du gibst den reservierten Speicher der StringListe wieder frei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:34 Uhr.
Seite 3 von 11     123 45     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz