Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   QVok - Ein Vokabeltrainer (https://www.delphipraxis.net/175250-qvok-ein-vokabeltrainer.html)

MrMooed 9. Jun 2013 12:39


QVok - Ein Vokabeltrainer
 
Liste der Anhänge anzeigen (Anzahl: 5)
Hey DP'ler,

ich wollte eich einmal eine Schulaufgabe vorstellen - Ein Vokabeltrainer der eine Liste als Datenstruktur verwendet.
Wie bei vielen Trainern, werden auch bei meinem die Vokabeln in "Stufen" einsortiert. Je öfter man sie richtig beantwortet, desto höher steigt sie in ihrer Stufe auf (Max Stufe 6). Falls sie falsch beantwortet wurde, so wandert sie zurück in die erste Stufe.

Mit ihm kann man:
  • Vokabeln hinzufügen
  • bereits vorhandene Vokabeln Editieren
  • Vokabeln löschen
  • nach einer Karte suchen
  • Vokabeln speichern und laden
  • Vokabeln abfragen:
    • durcheinander
    • Aus einer bestimmten Stufe
    • älter als ein gewisses Datum
  • den persönlichen Lernerfolg ansehen

//Edit:
  • version1:
    • Screenshots hinzugefügt
    • Ideen von API umgesetzt
  • version2:
    • Shortcuts
    • Levenshtein-Distanz zur Überprüfung der Antwort
    • Bugfix(e)
    • "Bedienungsanleitung" als Schulaufgabe (.PDF)

sx2008 9. Jun 2013 13:08

AW: QVok - Ein Vokabeltrainer
 
Ich hab mal in den Sourcecode reingeschaut...
Für ein Schulprojekt ist das erstaunlich gute Qualität. :thumb:
Auch die Benutzeroberfläche ist sehr ansprechend und auch für Touchscreens geeignet.

Aber ich habe auch noch ein bisschen was zu merkern:
Insgesamt ist der Code zu wenig kommentiert und falls Kommentare vorhanden sind, dann beschreiben sie nur das Offensichtliche. Beispiel:
Delphi-Quellcode:
Bt_Correct.Visible := False; //Button ausblenden
Lieber diese Null-Info-Kommentare weglassen und eine Kurz-Beschreibung vor jeder Klasse.

Und man sollte eine eigene Klasse auch nicht TList nennen weil es
Delphi-Quellcode:
TList
schon in der VCL gibt.

Sir Rufo 9. Jun 2013 13:24

AW: QVok - Ein Vokabeltrainer
 
Delphi-Quellcode:
TList
gehört zur RTL und nicht zur VCL ;)

MrMooed 9. Jun 2013 13:53

AW: QVok - Ein Vokabeltrainer
 
Zitat:

Zitat von sx2008 (Beitrag 1217933)
Ich hab mal in den Sourcecode reingeschaut...
Für ein Schulprojekt ist das erstaunlich gute Qualität. :thumb:
Auch die Benutzeroberfläche ist sehr ansprechend und auch für Touchscreens geeignet.

Gut, mir gefiel bis zum Schluss die GUI nicht im geringsten :oops:. Aber nun bin ich damit auch zufrieden :nerd:

Zitat:

Zitat von sx2008 (Beitrag 1217933)
Aber ich habe auch noch ein bisschen was zu merkern:
Insgesamt ist der Code zu wenig kommentiert und falls Kommentare vorhanden sind, dann beschreiben sie nur das Offensichtliche. Beispiel:
Delphi-Quellcode:
Bt_Correct.Visible := False; //Button ausblenden
Lieber diese Null-Info-Kommentare weglassen und eine Kurz-Beschreibung vor jeder Klasse.

Beim Kommentieren (mit dem ich auch noch nicht ganz fertig war) stelle ich mich immer komisch an .. ich weiß nie was ich kommentieren soll und was offensichtlich ist. Aber ich werde es mal probieren, vor der Methode eine erklärung zu schreiben :thumb:

Zitat:

Zitat von sx2008 (Beitrag 1217933)
Und man sollte eine eigene Klasse auch nicht TList nennen weil es
Delphi-Quellcode:
TList
schon in der VCL gibt.

Ahh, da hat NRW wohl mist gebaut :lol: die haben in den Abitur Vorgaben die Klasse so genannt, und unser Kurs hat es so übernommen.

Danke für dein feedback:-D

API 9. Jun 2013 15:16

AW: QVok - Ein Vokabeltrainer
 
Hallo,

Toll gemacht :-D ! Hätte noch ein paar Inputs / Verbesserungsvorschläge:

1. Hat man Vokabeln geöffnet (via Menü Öffnen) und klickt dann auf Neu, passiert nichts.

2. Hints wären wünschenswert, um die Aktionen genauer zu beschreiben. So ist bspw. bei Neu nicht unbedingt klar, was geschieht.

3. Ein Programmicon hinzufügen

4. Bei Doppelklick auf eine ListView Zeile die aktuelle Vokabel bearbeiten

5. Die Aktion "Löschen" erfolgt ohne Rückfrage. Ein Dialog "Möchten Sie die wirklich...?" vorschalten

6. Existiert eine Vokabel bereits und wird die gleiche (Vorderseite) hinzugefügt, wird die Vokabel (richtigerweise) nicht nochmals hinzugefügt. Jedoch sollte ein Hinweis erscheinen. (Diese Vokabel ist bereits vorhanden...etc.)

7. Vokabel exportieren (csv, Zwischenablage)

8. Befindet man sich in der Abfrage, sollten die Neu bis Suchen Buttons deaktiviert werden. (Momentan gibt es so eine AV bei KLick auf Löschen etc.)

9. In einer Statusbar die Anzahl Vokabeln der Listview anzeigen

10. Die Spaltenbreiten kannst du bereits im Objekt Inspektor festlegen. Somit ist dieser Code nicht nötig:

Delphi-Quellcode:
  LV_Ausgabe.Column[0].Width := 300;
  LV_Ausgabe.Column[1].Width := 300;
  LV_Ausgabe.Column[2].Width := 200;
  LV_Ausgabe.Column[3].Width := 50;

11. Etwas kürzer: Anstatt Visible :=

Delphi-Quellcode:
 Bt_Hinzufuegen.Visible := True;
  Bt_Bearbeiten.Visible := True;
  Bt_Loeschen.Visible   := True;
  Bt_Suche.Visible      := True;
  Bt_Abfrage.Visible    := True;
... .Show / .Hide verwenden.

Delphi-Quellcode:
  Bt_Hinzufuegen.Show;
  Bt_Bearbeiten.Show;
  Bt_Loeschen.Show;
  Bt_Suche.Show;
  Bt_Abfrage.Show;

jobo 9. Jun 2013 16:55

AW: QVok - Ein Vokabeltrainer
 
Toll! Design gefällt mir, ich vermisse lediglich hot keys. Aber das ist in Touchscreenzeiten wahrscheinlich out.

Mir ist nicht ganz klar, warum man selbst bestimmt, ob es richtig oder falsch war?

Warum Zeilenumbrüche in den Eingaben?
Ich habe probehalber eine Vokabel mit Zeilenumbruch angelegt.
Die Datei konnte nachher nicht geöffnet werden. Im Texteditor sieht man, dass sie exakt so gespeichert wurde, mit Zeilenumbruch.

Dateiformat:
Entspricht das irgendeinem Standard? Mag sein, zweckmäßig wäre ggF. ein bekanntes Format, vielleicht XML.
Wenn schon ein Header drin ist, wäre eine Formatversion auch nicht schlecht.

MrMooed 9. Jun 2013 18:02

AW: QVok - Ein Vokabeltrainer
 
Zitat:

Zitat von API (Beitrag 1217941)
Hallo,

Toll gemacht :-D ! Hätte noch ein paar Inputs / Verbesserungsvorschläge: [..]

  1. erledigt
  2. hatte ich eingefügt - allerdings ShowHints := False gesetzt :oops:
  3. da bin ich nicht kreativ genug für - die Button waren schon eine Meisterleistung für mich :lol:
  4. erledigt
  5. "Möchten Sie, dass ich das wirklich implementieren?" :-D - erledigt
  6. erledigt
  7. komme ich gleich zu
  8. erledigt. Statt .Visible nun .Enabled
  9. finde die Statusleiste Pottenhässlich - aber finde auch keinen Platz für ein TLabel o.Ä.
  10. Brille putzen hilft :shock:
  11. hat ne extra procedure bekommen, da ich es je nun doch öfters aufrufen muss

Zitat:

Zitat von jobo (Beitrag 1217945)
Toll! Design gefällt mir, ich vermisse lediglich hot keys. Aber das ist in Touchscreenzeiten wahrscheinlich out.

Danke, hatte ich zumindest für die Richtig / Falsch Buttons schon mal angedacht.. Denke es wird seinen Weg hinein finden.

Zitat:

Zitat von jobo (Beitrag 1217945)
Mir ist nicht ganz klar, warum man selbst bestimmt, ob es richtig oder falsch war?

damit, falls du einen wirklich banalen Tippfehler gemacht hast, deine Vokabel nicht direkt wieder in Stufe 1 landet.

Zitat:

Zitat von jobo (Beitrag 1217945)
Warum Zeilenumbrüche in den Eingaben?
Ich habe probehalber eine Vokabel mit Zeilenumbruch angelegt.
Die Datei konnte nachher nicht geöffnet werden. Im Texteditor sieht man, dass sie exakt so gespeichert wurde, mit Zeilenumbruch.

Dateiformat:
Entspricht das irgendeinem Standard? Mag sein, zweckmäßig wäre ggF. ein bekanntes Format, vielleicht XML.
Wenn schon ein Header drin ist, wäre eine Formatversion auch nicht schlecht.

Das hängt miteinander zusammen: Ich habe die Datein so aufgebaut, dass immer 4Zeilen eine Vokabel darstellen:
Code:
QVok Vokabel Datei
Vorderseite
Rückseite
Datum
Stufe
Vorderseite
Rückseite
...
Somit verschiebt sich das ganze, wenn er eine Vokabel über mehrere Zeilen abspeichert und in der nächsten Zeile dann kein Datum steht, sondern irgend ein wirrer Text. Habe erstmal die Zeilenumbrüche deaktiviert.
Wenn das irgend einem Standard entsprechen sollte, wäre das ein großer Zufall :lol: Das war mehr eine Überlegung meinerseits, wie ich die Daten strukturiert abspeichern kann. XML hatte ich mir in dazu flüchtig angesehen, aber nichts für mich verständliches gefunden. Zugegeben ich habe nicht gründlich gesucht, kennt dennoch jemand ein Tutorial o.Ä. zu XML ?

Danke für die vielen Rückmeldungen :thumb:

Furtbichler 10. Jun 2013 06:37

AW: QVok - Ein Vokabeltrainer
 
Zitat:

Zitat von MrMooed (Beitrag 1217938)
Beim Kommentieren (mit dem ich auch noch nicht ganz fertig war) stelle ich mich immer komisch an .. ich weiß nie was ich kommentieren soll und was offensichtlich ist.

Wenn Du Dir vorstellen kannst, das der Code von Dir bzw. einem mit ähnlichem Wissen verstanden wird, brauchst Du nicht zu kommentieren.

Wenn der Code allerdings so kompliziert ist, das Du ihn kommentieren müsstest... schreib ihn um. :-)

Kommentare im Code sind fast nie notwendig. Ausnahmen sind : Quellenangaben, Urheberhinweise ("Copyright"), Gesetzesvorschriften usw.

Wie sx2008 schon gesagt hat: Beschreibe lieber die Klassen, Methoden und Parameter. Wozu dienen sie? Welche Einschränkungen gibt es (muss > 0 sein, usw). Prüfe diese Bedingungen in deinem Code ruhig ab (außer, es ist Geschwindigkeitsrelevant).

jobo 10. Jun 2013 07:55

AW: QVok - Ein Vokabeltrainer
 
Zitat:

Zitat von MrMooed (Beitrag 1217950)
Zitat:

Zitat von jobo (Beitrag 1217945)
Mir ist nicht ganz klar, warum man selbst bestimmt, ob es richtig oder falsch war?

damit, falls du einen wirklich banalen Tippfehler gemacht hast, deine Vokabel nicht direkt wieder in Stufe 1 landet.

Hier wäre doch die Sahnehaube, einen "intelligenten" Prüfalgorithmus einzusetzen.
Stichwort Levenshtein-Distanz, da kann man schöne Sachen mit machen. Vielleicht gibt's schon fertige Implementierungen im Netz...

Zitat:

Zitat von MrMooed (Beitrag 1217950)
Zitat:

Zitat von jobo (Beitrag 1217945)
Warum Zeilenumbrüche in den Eingaben?
Ich habe probehalber eine Vokabel mit Zeilenumbruch angelegt.
Die Datei konnte nachher nicht geöffnet werden. Im Texteditor sieht man, dass sie exakt so gespeichert wurde, mit Zeilenumbruch.

Dateiformat:
Entspricht das irgendeinem Standard? Mag sein, zweckmäßig wäre ggF. ein bekanntes Format, vielleicht XML.
Wenn schon ein Header drin ist, wäre eine Formatversion auch nicht schlecht.

Wenn das irgend einem Standard entsprechen sollte, wäre das ein großer Zufall :lol:

Ein Standardformat (bspw. CSV) böte die Möglichkeit, bequem einen existierenden Datenbestand zu importieren. Bei CSV braucht man dann aber eine ordentliche Implementierung, falls man doch mit Zeilenumbrüchen arbeitet. Oder eben XML.

Bjoerk 10. Jun 2013 08:58

AW: QVok - Ein Vokabeltrainer
 
Um die Bedienelemente zu setzen, kannst du ein Set benutzen (ist übersichtlicher und weniger fehleranfällig).

Delphi-Quellcode:
type
  TToolButtonEnabledFlags = set of (tbefNeu, tbefOpen, tbefSave, tbefAdd,
    tbefEdit, tbefDel, tbefSearch, tbefAbfrag, tbefAll);

..

procedure TFGUI.SetToolButtonsEnabled(Flags: TToolButtonEnabledFlags);
begin
  Bt_Neu.Enabled := (tbefNeu in Flags) or (tbefAll in Flags);
  Bt_Oeffnen.Enabled := (tbefOpen in Flags) or (tbefAll in Flags);
  Bt_Speichern.Enabled := (tbefSave in Flags) or (tbefAll in Flags);
  Bt_Hinzufuegen.Enabled := (tbefAdd in Flags) or (tbefAll in Flags);
  Bt_Bearbeiten.Enabled := (tbefEdit in Flags) or (tbefAll in Flags);
  Bt_Loeschen.Enabled := (tbefDel in Flags) or (tbefAll in Flags);
  Bt_Suche.Enabled := (tbefSearch in Flags) or (tbefAll in Flags);
  Bt_Abfrage.Enabled := (tbefAbfrag in Flags) or (tbefAll in Flags);
end;

..

  SetToolButtonsEnabled([tbefAll]);
  SetToolButtonsEnabled([tbefAbfrag]);
Gruß
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.

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