Autor Beitrag
Hasche
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mi 12.12.07 11:42 
Ich habe mein Programm so weit ichs kann fertig, jetz müssten den Vokabeln nur noch Werte gegeben werden, damit die, die man richtig übersetzt, weniger abgefragt werden als die, die man nicht weiß bzw falsch übersetzt.

Was wird zum bearbeiten/helfen benötigt? :)
Danke
Einloggen, um Attachments anzusehen!
DrRzf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260

Win XP Prof
D7 Enterprise
BeitragVerfasst: Mi 12.12.07 20:13 
Wie speicherst du deine Vokabeln ?
Stringliste ? direkt aus der Listbox ? oder hast du einen eigenen DatenTypen zum speichern ?
je nachdem wie du die verwaltest, gibts dazu unzählige möglichkeiten.

Wenn du zb einen eigenen Datentypen (record) angelegt hast, könnte man dann diesen um einen integer erweitern,
den man jedesmal bei richtiger übersetzung eins hochzählt.

_________________
rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
Hasche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mi 12.12.07 22:28 
So siehts im Moment aus..
Einloggen, um Attachments anzusehen!
DrRzf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260

Win XP Prof
D7 Enterprise
BeitragVerfasst: Mi 12.12.07 22:49 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type Teintrag = record
        nr:integer;
        deutsch:string[20];
        englisch:string[20];
     end;


procedure TForm1.Button3Click(Sender: TObject);
begin
memo1.Lines.SaveToFile('SpeicherVokabel1.txt');
memo2.Lines.SaveToFile('SpeicherÜbersetzung1.txt');
end;



Wie ich sehe hast du zwar einen Typen TEintrag erstellt, aber du benutzt diesen nicht.
das währe einer der möglichkeiten.

Verwaltung deiner daten geschieht anscheinend komplett über die beiden Memos.
Ich hab die befürchtung dieses Vorgehen ist recht fehleranfällig. löscht du aus einem Memo eine Zeile, dann
stimmen die listen nicht mehr überein.
Durch verwendung von TEintreg hättest du immer die richtigen Datensätze zusammen, auch könnte man über nr den zöähler
für die richtigen antworten nutzen.

um mit TEintrag zu arbeiten musst du davon noch eine var ableiten, alm besten als dynamisches array.
dann fehln dir noch eine prozedure um daten darin zu speichern, löschen, und den kompletten datensatz zu speichern und zu laden.
wenn du hilfe dabei brauchst, kann ich dir gern weiterhelfen.

_________________
rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
Hasche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mi 12.12.07 22:56 
Ich wär echt sehr dankbar, wenn du mir da einige Sachen erklären könntest, wie ich das anstelle, weil ich absolut keine Ahnung von der Umsetzung habe im Moment :)

EDIT: Mir ist auch grade aufgefallen, dass das Wörterbuch nicht funktioniert -.- Ich verzweifel -.- Ich habs nur mit Mutter getestet immer, da funktioniert es, weil es in der 1. Zeile steht. Vokabeln ab der 2. Zeile werden nicht übersetzt :(
Einloggen, um Attachments anzusehen!
DrRzf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260

Win XP Prof
D7 Enterprise
BeitragVerfasst: Mi 12.12.07 23:08 
Schau dir mal diesen beitrag an.
Im letzten post ist ein programm 'Domino_fertig.zig'
dieses programm arbeitet auch mit einem dynamischen array und records für die zahlen.
grundlegende functionen, wie speichern laden etc, findest du dort in der zweiten unit.
die dürften die grundfunctionen schonmal erfüllen.

der record muss aber vorher noch an deine bedürfnisse mit den 2 strings angepasst werden.
und am besten aus dem TStein einen record mit passendem namen für dein projekt machen.

hier der link zu dem thread.
www.delphi-forum.de/...ursion_78750,40.html

_________________
rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
Hasche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mi 12.12.07 23:17 
Habe mir das Programm angeguckt und getestet etc, kann aber hinsichtlich meines Programmes nicht wirklich damit was anfangen (aus meiner Sicht ^^)
Müsste ich nach deinen Beschreibungen mein prog nochma komplett umschreiben und neu machen? :(
ace1905
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Mi 12.12.07 23:24 
hi ich bin au am pmg aber in der 11
kennst mich viell. au
ich bin manchma donnerstags im inforaum wenn du au da bist
naja also ich würde das viell nich mit memos machen (also die vokabellisten) sondern vill mit ner listbox:-P
außer nat. frau enke will das so aber ich find dass memos da unpraktisch sin weil man sie ja au beliebig verändern kann
DrRzf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260

Win XP Prof
D7 Enterprise
BeitragVerfasst: Mi 12.12.07 23:33 
Wenn du mit einem Typ arbeitest, dann müssten die functionen nur angepasst werden.
Es ging mir momentan eher um das verständnis dafür wie due mit Typen arbeitest und wie du diese dann speichern, laden, daten hinzufügen und wieder entfernen kannst.

dazu müssten die functionen in diesem programm nur minimal geändert werden.
ich kann dir ja mal das geänderte gerüst für die grundfunctionen in eine eigene unit packen.

hauptsächlich waren mir dabei diese 4 functionen in der zweiten unit 'Engine' im auge.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure AddSteinEin(St : TStein);
procedure DelSteinEin(pos : integer);
procedure LoadSteine;
procedure SaveSteine;

_________________
rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
ace1905
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Mi 12.12.07 23:35 
also ich würde die memos weglassen und listboxen einsetzen

wenn du dann neue vokabeln hast kannst du die hinzufügen indem du das schreibst:
ausblenden Delphi-Quelltext
1:
2:
ListBox_deutsch.Items.Add(Edit1.Text);
ListBox_englisch.Items.Add(Edit2.Text);


habt ihr aber bestimmt schon gehabt oder ??
naja dann gibts noch son paar kleine schönheitsfehler z.B. die tabulatorenreihe un so...
ace1905
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Mi 12.12.07 23:55 
ich habs mal auf listboxen umgeschrieben
das löst zwar noch nicht dein problem mit den werten der vokabeln aber ich denk das mit den listboxen bringt schonma ne menge;)
Einloggen, um Attachments anzusehen!
DrRzf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260

Win XP Prof
D7 Enterprise
BeitragVerfasst: Do 13.12.07 00:31 
user profile iconace1905 hat folgendes geschrieben:
ich habs mal auf listboxen umgeschrieben
das löst zwar noch nicht dein problem mit den werten der vokabeln aber ich denk das mit den listboxen bringt schonma ne menge;)


Um dann seine erfolgreichen treffer mit zu speichern müsste er also noch ne 3te liste anlegen um diese zu verwalten.
Ich halte das ganze grundkonzept daher recht fragwürdig. alle 3 listen müssen dabei stets gleich behandelt werden. ansonsten gibts probleme mit der synchronisation der listen.
löscht er aus versehn eine zeile oder fügt irgendwo eine hinzu, passen die daten nicht mehr zusammen.
Listboxen ja, aber nur zur anzeige der daten, die verwaltung selbst würd ich definitiv einem record überlassen.

Wenn er nur immer eine vokabel angezeigt bzw abgefragt haben will, könnte man das ganze dann auch auf 2 edits beschränken.

_________________
rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
Zorro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win 2000, Win XP Pro
Delphi 7 Architect
BeitragVerfasst: Do 13.12.07 01:48 
user profile iconHasche hat folgendes geschrieben:
Ich wär echt sehr dankbar, wenn du mir da einige Sachen erklären könntest, wie ich das anstelle, weil ich absolut keine Ahnung von der Umsetzung habe im Moment :)

EDIT: Mir ist auch grade aufgefallen, dass das Wörterbuch nicht funktioniert -.- Ich verzweifel -.- Ich habs nur mit Mutter getestet immer, da funktioniert es, weil es in der 1. Zeile steht. Vokabeln ab der 2. Zeile werden nicht übersetzt :(


Grundsätzlich sehe ich zwei Konzepte (du hast im Moment eine Mischform in deinem Programm, die zu Unsauberkeiten führt):

Variante A:
(Du befindest dich - abgesehen von der Oberfläche - auf purem Pascal-Terrain, sprich das könnte sogar ein DOS-Proggi werden):
Du nimmst einen Recordtyp (den hast du zwar als Typ definiert aber im Prog selber wird er überhaupt nicht verwendet!)
Den kannst du frei gestalten (neben dem deutschen und dem englischen Wort also zB ein Feld für Zähler der richtigen Antworten und/oder wie oft dieses Wort schon angezeigt/abgefragt wurde usw.), bist aber für das Laden und Speichern (stets des GESAMTEN Records, sonst wird das inkonsistent) selber zuständig. Die Delphi-Hilfe ist dein Freund (mit den Stichworten "assignfile", "reset", "rewrite" usw.). Darüber hinaus musst du dich mit dem Thema "Array of TDeinRecord" befassen.

Bsp:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Type TVokRecord = Record
  deutsch: String[20];
  englisch: String[20];
  richtig: Integer;
End;
...
Var Vok: Array[1..300Of TVokRecord;
...
Vok[3].deutsch := 'Vater';
Vok[3].englisch := 'father';
Vok[3].richtig := 0;


Variante B:
(Du befindest dich in der Delphi-Objekt-Hierarchie):
Du nimmst einen Abkömmling des TStrings-Objektes (sowohl die Items der Listbox als auch die Lines eines Memo sind TSrings-Objekte), da hast du den Vorteil, dass du auf die (bereits vorhandenen) Methoden LoadFromFile und SaveToFile zurückgreifen kannst, die dir das schwuppdiwupp erledigen. Im Gegenzug musst du dafür Sorge tragen, dass deine "Listen" synchron sind und bleiben. Eine dafür geeignete Lösung ist eine weitere (unsichtbare) Liste, die jeweils das passende Element aus ALLEN sichtbaren Listen mit einem geeignete Trennzeichen (zB '~') aneinanderreiht, und NUR DIESE (unsichtbare ) Liste wird gespeichert/geladen. Dazu musst du dich dann mit dem Thema String-Parsen (sprich: zerlegen) auseinandersetzen.

Bsp:
ausblenden Delphi-Quelltext
1:
InvisibleListbox.Add('Vater~father~000');					


Wichtig ist, dass du dich für EINE Lösung entscheidest und die in deinem Proggi durchziehst.

Greetz
Zorro
Hasche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Do 13.12.07 05:22 
Ich habe jetzt schonmal die Version von ace1905 übernommen, danke dafür :)
Ist praktischer und speichern etc lässt sich damit auch alles regeln.. Das gleiche Prob wie bei meinem alten Prog besteht allerdings immernoch: Die Übersetzung (Wörterbuch) funktioniert nur mit der 1. Vokabel in der Reihe, die restlichen werden nicht übersetzt :(

edit1 = gesuchte Vokabel
ListBox1 = deutsche Vokabelliste
edit2 = Übersetzung von edit1
ListBox2 = englische Vokabelliste

Deutsch->Englisch
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button1Click(Sender: TObject);
begin
If edit1.Text=ListBox1.Items[b] then
edit2.Text:=ListBox2.Items[b];
end;


Englisch->Deutsch
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button5Click(Sender: TObject);
begin
If edit1.Text=ListBox2.Items[b] then
   edit2.text := ListBox1.Items[b]
end;
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Mo 17.12.07 14:03 
Hi
Um einen Vokabeltrainer zu schreiben würde ich folgendermaßen vorgehen:
Zuerst brauchst du eine Datenablage, also, wo deine Vokabeln hinterlegt werden. Wenn du schon mal mit der BDE oder einer Datenbank gearbeitet hast, ist das gar kein Problem. Ansonsten schau mal mithilfe der Suche nach Adressbuch. Oder über meinen Namen, ein paar hilfreiche Hinweise zum einfachen Erstellen von Datenbanktabellen hab ich da schon gegeben.
(ok, bevor wieder Mecker kommt, keine BDE, weil nicht stabil. Doch wenn du nix anderes hast, ist’s immer noch besser als garnüscht. Und ich hab noch nie Probleme gehabt... )
Mach dir zuerst einmal Gedanken, welche Vokabeln du hinterlegen willst. Mithilfe der Datenbank ist es ganz einfach, auch mehrere Sprachen einzurichten.
Dazu gehst du folgendermaßen vor
| lfdNr | deutsch | englisch | franz | spanisch | ED_W | DE_W | DF_W | FD_W | DS_W | SD_W | etc

Nun, das ist vielleicht etwas zuviel des guten, daher reicht auch deutsch – englisch mit ED_W(ertung) und DE_W(ertung) Daher beschreibe ich in der Folge die Arbeit mit einem Dateisystem.
Dazulegst du dir eine Recordstruktur an.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Type  
  R_Vokabel =RECORD 
  Deutsch        : String;
  Englisch       : String;
  DE_Wertung: Integer:
  ED_Wertung: Integer;
End;

Und unter Var dann die Deklaration der eigentlichen Recordvariable
MyVokabelsatz : R_Vokabel;
Nun die Erklärung zum Datensatz: die Vokabeln deutsch und englisch sollten klar sein, aber DE_W und ED_W sind integervariablen, die eine Stufung aufgrund richtiger Antworten ermöglichen. Je höher die Zahl, umso öfter ist diese Vokabel richtig beantwortet worden.
Damit legst du fest, wie oft diese Vokabeln dir wieder zur Abfrage vorgelegt werden und du kannst einen Wert bestimmen, ab welchem du glaubst, es reicht ...
Allerdings kannst du sie auch als String behandeln, um vielleicht ein paar Umwandlungen zu sparen.
Und nun schauen wir mal, was dein Programm so alles können muß :
Die Dateneingabe
Zuerst brauchst du eine Eingabemöglichkeit, wo du die Vokabeln zusammenhängend erfaßt und die Wertung mit 0 abgelegt wird. Wenn du der Meinung bist, diese Vokabel soll erfasst aber nicht abgefragt werden, dann setz einfach die Wertung hoch. Editieren solltest du auch können und löschen, damit auch eine Nacharbeit bei fehlerhafter Eingabe möglich ist.
Daher macht sich‘s immer gut, für jedes Feld ein Editfeld zu spendieren.
Also, ED_Deutsch, ED_Englisch, ED_EDWert (Für deutsch -> Englischwertung) und ED_DEWert, wobei das „ED_“ in der Namensgebung auf ein Editfeld hinweist. Damit behältst du auch bei umfangreichen Formularen den Überblick. Nun kannst du hinter jedes Editfeld eine Combobox legen, die du mit den Werten aus den bereits gespeicherten Daten füllst. Lediglich den Bereich zum Aufklappen der Combobox läßt du sichtbar. Wenn du diese nun aufklappst, kannst du den Wert des Eintrages, den du korrigieren willst, auswählen und in der Ereignisroutine der Combobox schreibst du nun alle Einträge, auch die der anderen Comboboxen in die zugehörigen Editfelder. Und damit wir auch unserer Übersichtlichkeit Rechnung tragen, bekommen die Comboboxen entsprechend Namen CB_deutsch, CB_englisch, CB_DEWert und CB_Ed_Wert, analog zu den Editfeldern
Ins OnClick der Comboboxen schreibst du nun entsprechend zur Combobox

ausblenden Delphi-Quelltext
1:
2:
3:
4:
Ed_deutsch.Text:=CB_deutsch.Items[CB_deutsch.ItemIndex];
Ed_englisch.Text:= CB_englisch.Items[CB_deutsch.ItemIndex];// ausgehend vom OnClick  in CB_Deutsch
Ed_DEWert.Text:= CB_DEWert.Items[CB_deutsch.ItemIndex];// ausgehend vom OnClick  in CB_Deutsch
Ed_EDWert.Text:= CB_EDWert.Items[CB_deutsch.ItemIndex];// ausgehend vom OnClick  in CB_Deutsch

Nun kann der fehlerhafte Eintrag in den Editfeldern korrigiert und dann über ein Butten abgespeichert werden.
Entweder. Du speicherst mit erneutem Einlesen der Daten, oder du schreibst die Inhalte der Editfelder in die Combobox zurück. Neue Werte könntest du auf demselben Weg erfassen, indem du nach der Übernahme der Werte die Editfelder leerst und die Wertefelder auf 0 setzt. Nun mußt du nur noch wissen, was ist Korrektur, was ist neu. Das könntest du lösen, indem du in der onClick –Methode der Comboboxen ein Korrekturflag setzt
Korrflag:=True;
In der onClick-Metode deines Übernahmebuttons fragst du das Korrflag ab:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
If Korrflag then
Begin
  CB_deutsch.Items[CB_deutsch.ItemIndex]:=Ed_deutsch.Text;
  CB_englisch.Items[CB_deutsch.ItemIndex]:= Ed_englisch.Text;// ausgehend vom OnClick  in CB_Deutsch
  CB_DEWert.Items[CB_deutsch.ItemIndex]:= Ed_DEWert.Text;// ausgehend vom OnClick  in CB_Deutsch
  CB_EDWert.Items[CB_deutsch.ItemIndex]:= Ed_EDWert.Text;// ausgehend vom OnClick  in CB_Deutsch
End else
Begin
  CB_deutsch.Items.Add(Ed_deutsch.Text);  // neuer Datensatz
  CB_englisch.Items.Add( Ed_englisch.Text);
  CB_DEWert.Items.Add( Ed_DEWert.Text);
  CB_EDWert.Items.Add( Ed_EDWert.Text);
End
Ed_deutsch.Text:=‘‘;  // Felder leeren
Ed_englisch.Text:=‘‘;
Ed_DEWert.Text:=‘0‘; // Bewertung auf 0
Ed_EDWert.Text:=‘0‘;
Korrflag:=false; // Korrflag löschen....

Für die Löschfunktion nimmst du ein separates Button.
Damit wäre grob gesehen deine Datenerfassung fertig.

Schreib dir für die Schreib- und Leseaufgaben eigene Proceduren. Damit kannst du in einem kleinen Programmteil die Routinen prüfen. Außerdem kannst du per Button zwischendurch speichern, wenn du die Eingaben wie hier beschrieben zuerst nur in den Comboboxen ablegst.




Nun zum Trainer selbst.
Fast das selbe Bild, wie im Editor, allerdings nur optisch. Zuerst lädst du deine Vokabeldatei, dabei brauchst du nun etwas mehr als nur 4 Listen.
Da ich davon ausgehe, du speicherst deine Daten in eine Datei und Speicherplatz dank der Speicherhersteller ja genügend vorhanden ist, dürfen wir daher auch ein wenig großzügig sein.
Also laden wir alle Records wie beim Editor in Comboboxen. Benennen wir sie mit der Erweiterung Trainer, also
Cb_DeutschTrainer
Cb_EnglischTrainer
Cb_DEWertTrainer
Cb_EDWertTrainer
Diese machst du später unsichtbar, kannst sie aber auch zum Nachschlagen bei schweren Vokabeln sichtbar lassen und im Notfall aufklappen.
Nun nehmen wir 3 neue Comboboxen und holen uns aufgrund der Bewertung die Vokabeln, die noch geübt werden müssen.
Diesen geben wir die Erweiterung Auswahl
CB_deuschAuswahl
CB_englischAuswahl
und der dritten den Namen CB_Index für die Position in der Originaldatei.
Sagen wir mal, du willst alle Vokabeln nacharbeiten, die eine Wertung Deutsch-> Englisch schon 2 mal positiv bearbeitet wurden, also setzt du in einem Editfeld die Wertung auf 2. Dieses Editfeld nennen wir ED_suche.
Dann lassen wir die Vokabellisten durchlaufen und da alle gleich lang sind, reicht eine für die Auswahlschleife
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
For i:=0 to Cb_deutschTrainer.Items.Count-1 do // -1 , weil bei 0 begonnen wird
Begin
   If Cb_DEWertTrainer=Ed_Suche.Text then 
   Begin
       Cb_Index.Items.Add(IntToStr(i)); // hier kommt die wirkliche Position in der Datenliste hinein
       CB_deuschAuswahl.Items.Add(Cb_DeutschTrainer.Items[i]); //hier füllen wir unsere Auswahllisten
       CB_englischAuswahl.Items.Add(Cb_englischTrainer.Items[i]); 
   End;
End;

Cb_Index wird unsichtbar dargestellt. Du kannst natürlich auch die Listen zur Kontrolle sichtbar lassen, und erst später ausblenden.
Cb_DeutschAuswahl und CB_EnglischAuswahl bleiben sichtbar, allerdings kommt auch hier über das Textfeld ein Editfeld, welches die Information abdeckt.
Arbeiten mit dem Trainer
Öffnest du nun die Liste mit den englischen Vokabeln, so wird der ausgewählte Eintrag ins Editfeld geschrieben, das Editfeld auf der anderen Seite machst du leer. Zusätzlich setzt du einen Richtungsmerker, um deine Wertung bei richtiger Antwort hochzusetzen.
So könnte die OnClick Methode von Cb_DeutschAuswahl aussehen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
AuswahlIndex:= Cb_DeutschAuswahl.ItemIndex; // globale Integer Variable für den Recordsatz
ED_Deutschauswahl.Text:=Cb_DeutschAuswahl.Items[AuswahlIndex]; // Auswahl sichtbar machen
Reftext:=Cb_EnglischAuswahl[AuswahlIndex]; // hinterlegte Antwort unsichtbar merken
ListZeiger:=StrToInt(Cb_Index[AuswahlIndex]); // Listzeiger auch globale Integervariable 
Richtung :=12// globale Integer, besagt Abfragefeld 1-> Antwortfeld 2

Nun wird interessant. Der Listzeiger beinhaltet die Datensatznummer der Gesamtdatei und damit ist ein Ändern der Wertung direkt möglich. Da unser Editfeld für die Englischvokabel ja leer ist, schreiben wir da die Antwort hinein. Danach betätigen wir ein Button „prüfen“
Diese OnClick-Ereignismethode sieht dann so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
If Richtung =12 then
Begin
  If ED_englischAuswahl.Text=Reftext then 
  Begin
      Merker :=StrToInt(Cb_DEWert.Items[Listzeiger]); // alte Bewertung aus Hauptliste in lokale Integer Var holen
      Merker:=Merker+1// Wert erhöhen
      Cb_DEWert.Items[ListZeiger]:=IntToStr(Merker);  // Bewertung in Hauptliste setzen
      Cb_Index.Items.Delete(AuswahlIndex); // und nun den Eintrag aus den Abfragelisten löschen
      Cb_DeutschAuswahl.Items.Delete(AuswahlIndex);
      Cb_englischAuswahl.Items.Delete(AuswahlIndex);

  End
end else
begin
  If ED_deutschAuswahl.Text=Reftext then
  Begin
      Merker :=StrToInt(Cb_EDWert.Items[Listzeiger]); // alte Bewertung aus Hauptliste in lokale Integer Var holen Merker:=Merker+1; // Wert erhöhen
      Cb_EDWert.Items[ListZeiger]:=IntToStr(Merker); // Bewertung in Hauptliste setzen
      Cb_Index.Items.Delete(AuswahlIndex); // und nun den Eintrag aus den Abfragelisten löschen
      Cb_DeutschAuswahl.Items.Delete(AuswahlIndex);
      Cb_englischAuswahl.Items.Delete(AuswahlIndex);
 
  End;
End;

Statt Merker zu benutzen könnte die Zeile z.B. auch so aussehen:
 Cb_EDWert.Items[ListZeiger]:=IntToStr(StrToInt(Cb_EDWert.Items[ListZeiger])+1); // besser ??
Nun noch ein paar Worte zur Gestaltung, wobei der Folgende Vorschlag nur eine von vielen Möglichkeiten zeigt, diese dafür aber sehr einfach ist
Du ziehst auf deine blanke Form 3 Panels. Auf eines Der Panels, welches du über die gesamte breite deiner Form ziehst, mit einer Höhe von ca. 2cm.
Darauf setzt du ein Button für schließen, eines für Trainer und eines für Editor.
Schließen ist klar, MyForm.Close in der OnClick-Methode. Evtl. vorher noch die Listen (Records ) abspeichern

Klickst du auf Trainer:
ausblenden Delphi-Quelltext
1:
2:
PN_Editor.Visible:=False;
 PN_Trainer.Visible:=True;

Und natürlich ist der Klick auf Editor
ausblenden Delphi-Quelltext
1:
2:
PN_Trainer.Visible:=False;
  PN_Editor.Visible:=True;


Damit ist auch klar, die beiden anderen Panels werden übereinander gelegt, benannt entsprechend mit dem Präfix „PN_“ .Zuerst wirst du sie etwas versetzt halten müssen, damit du sie dir beim Programmieren nach vorn holen kannst. Es ist auch wichtig, das die Elemente des Trainers auch auf dem Panel PN_Trainer sind ebenfalls die Elemente des Editors auf dem Panel PN_Editor.
Nun, das war viel Stoff, aber ich hoffe, eine nicht all zu schwere Anleitung und Vorgehensweise beschrieben zu haben und dabei verständlich geblieben bin.
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....