Delphi-PRAXiS
Seite 6 von 11   « Erste     456 78     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)

Delphi.Narium 18. Nov 2018 21:58

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);
...

Schokohase 18. Nov 2018 22:06

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?

KetchUp 19. Nov 2018 20:24

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

Zitat von Schokohase (Beitrag 1418394)
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?

Man soll die Vokabel 3 mal hintereinander richtig eingeben müssen, bis sie gelöscht wird. Deswegen will ich verhindern, dass er mehrmals die Gleiche abfragt. Aber ich weiß noch nicht, wie ich jeder Vokabel eine Variable zuweißen kann die dann von 3 runter zählt.

DieDolly 19. Nov 2018 21:08

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

Aber ich weiß noch nicht, wie ich jeder Vokabel eine Variable zuweißen kann die dann von 3 runter zählt.
Klassen, SolvedCount :roll::roll::roll:

KetchUp 19. Nov 2018 21:17

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

Zitat von DieDolly (Beitrag 1418475)
Zitat:

Aber ich weiß noch nicht, wie ich jeder Vokabel eine Variable zuweißen kann die dann von 3 runter zählt.
Klassen, SolvedCount :roll::roll::roll:

Ich finde es wirklich toll, dass du dir die mühe gemacht hast den Quellcode dafür zu schreiben und auch schade, dass du ihn wieder entfernt hast. Das hätte auch anderen helfen können. :(

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.

Schokohase 19. Nov 2018 21:50

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.

DieDolly 19. Nov 2018 22:01

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

und auch schade, dass du ihn wieder entfernt hast.
Weil du dich gegen Neues aussprichst. Neu ist für dich Gift. So fasse ich das jedenfalls auf.
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.

p80286 20. Nov 2018 00:51

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:
type
myrecord = record
             Vokabel : string;
             Uebersetzung : string;
             Zaehler : integer;
          end;
In diesem Falle hast Du alle notwendigen Daten in einem Datensatz zusammen gefasst. Da hast Du keinen Aufwand mit der Synchronisation.
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

haentschman 20. Nov 2018 08:00

AW: Elemente aus TStringList in Laufzeit entfernen
 
Moin...:P
@KetchUp:
Da keine Rückfrage aufgekommen ist, die Frage, ob du das:
https://www.delphipraxis.net/1418380-post46.html
...gelesen hast?

Schokohase 20. Nov 2018 08:21

AW: Elemente aus TStringList in Laufzeit entfernen
 
[OT]
Zitat:

Zitat von haentschman (Beitrag 1418380)
* leilweise nicht sprechende Namen jpg besser ImageAnswer

Diese Logik der Bezeichnung habe ich aber noch nie verstanden.
  • Es gibt eine Eigenschaft
    Delphi-Quellcode:
    Application.MainForm
    und keine
    Delphi-Quellcode:
    Aplication.FormMain
  • Es gibt eine
    Delphi-Quellcode:
    EArgumentException
    und keine
    Delphi-Quellcode:
    ExcpetionArgument
  • Der Styleguide sagt
    Delphi-Quellcode:
    AnswerForm
    ist toll und nicht
    Delphi-Quellcode:
    FormAnswer
    oder
    Delphi-Quellcode:
    frmAnswer
Wenn man diesen Styleguide und Sourcecode-Regeln weiter folgen würde, dann müsste die Bezeichnung für ein
Delphi-Quellcode:
TImage
, das für die Antwort verwendet wird
Delphi-Quellcode:
AnswerImage
lauten.
[/OT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Seite 6 von 11   « Erste     456 78     Letzte »    

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