![]() |
AW: Elemente aus TStringList in Laufzeit entfernen
Wenn die Vokabeln, nachdem sie erfolgreich "erraten" wurden, aus der Liste entfernt werden, ist Count irgendwann = 0. Dann ist die Liste leer.
Ist Count = 1, ist nur noch eine Vokabel enthalten, dann läuft die Schleife wirklich weiter, bis der Strom ausfällt ;-) Wenn man per Index auf 'ne Stringliste zugreift, sollte man ggfls. vorher abfragen, ob Index >= 0 und kleiner Count ist. Nur dann "greift" man auf einen vorhandenen Wert zu. Wenn also nur noch eine Vokabel in der Liste ist, könnte man z. B. sowas in der Art machen:
Delphi-Quellcode:
if Vocabulary.Count = 0 then begin
ShowMessage(Format('Die letzte Vokabel ist: %s',[Vocabulary.ValueFromIndex[0]]); // Oder hier das "Fertigformular" (Form3) aufrufen ... end else begin RepetitionCheck:=RandomNumber; While RepetitionCheck = RandomNumber Do RandomNumber:=random(Vocabulary.Count); ... |
AW: Elemente aus TStringList in Laufzeit entfernen
Wenn aus der Liste ein zufälliges Element ausgewählt wurde, dann wird es auch aus der Liste entfernt.
Wozu gibt es jetzt diesen RepetitionCheck? Was nicht mehr in der Liste ist, kann auch nicht wieder gezogen werden. Am Index 17 steht ein anderer Wert als vorher (weil die 17 wurde ja entfernt). Wo wäre also das Problem, wenn zweimal hintereinander die 17 gezogen wird? |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
|
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
|
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Es fällt mir aber sehr schwer mich in das System reinzudenken und ich kann (und möchte auch nicht) einfach Quellcode kopieren, da ich jede Zeile Quellcode in einem Vortrag erklären können muss. Mir liegt das Programmieren nicht so, bin eher der Grafiker. Ich finde es aber interessant und will eine gute Arbeit abliefern. |
AW: Elemente aus TStringList in Laufzeit entfernen
Dann mal einen Vorschlag ohne Klassen.
Lade die Liste und arbeite diese ab (Eintrag wird sofort gelöscht). Wenn die leer ist dann wieder aus der Datei laden, und nochmal durch, laden und nochmal durch und fertig. |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Wenns dir schwer fällt dich darein zu denken, dann nutz doch Google oder F1 oder die online Embarcadero Hilfe oder das Forum oder oder. Du erfindest das Rad neu, und nicht nur einmal. Nutzen von Klassen und Listen hat hier nur Vorteile denn du nutzt zusätzlich zum einmaligen Laden der Vokabeln eh eine StringListe. 2 Fliegen mit einer Klappe. |
AW: Elemente aus TStringList in Laufzeit entfernen
Dann versuche ich mal eine Erklärung.
Du hast eine Vokabel und die zugehörige Übersetzung. Weiterhin benötigst Du eine Zählung für die korrekte Übersetzung. Du könntest mit drei Arrays (Vokabel,übersetzung,zählung) arbeiten. Das ist aber arg aufwendig und fehleranfällig. Eine andere Möglichkeit wäre es ein Record zu nutzen z.b.
Delphi-Quellcode:
In diesem Falle hast Du alle notwendigen Daten in einem Datensatz zusammen gefasst. Da hast Du keinen Aufwand mit der Synchronisation.
type
myrecord = record Vokabel : string; Uebersetzung : string; Zaehler : integer; end; Jetzt packst Du die Records noch in eine Liste, die nicht nur die Daten sondern auch alle notendigen Funktionen enthält und Das halbe Programm ist fertig. Die andere Hälfte ist die Darstellung und die Benutzereingaben. Mit den Daten hast Du dann nichts mehr zu tun, da die Auswahl der Datensätze, die Zählung, die Initialisierung etc. in der Liste enthalten sind. Gruß K-H |
AW: Elemente aus TStringList in Laufzeit entfernen
Moin...:P
@KetchUp: Da keine Rückfrage aufgekommen ist, die Frage, ob du das: ![]() ...gelesen hast? |
AW: Elemente aus TStringList in Laufzeit entfernen
[OT]
Zitat:
Delphi-Quellcode:
, das für die Antwort verwendet wird
TImage
Delphi-Quellcode:
lauten.
AnswerImage
[/OT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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