Hallo
Zum Programm kann ich selbst nicht viel sagen, weil ich kann kein Latein  . Was mich aber am Programm nervt, ist diese sinnlose Anfangsmusik.
Zu den Quelltexten: Sorry, aber Du hast noch viel vor.
1. Als erstes springen mir jede Menge Komponenten ins Auge, die du nicht richtig bennant hast. Button10 etc. . Was haben die für eine Funktion ? ohne das ich in den Quellcode gugge, ist es nicht sofort ersichtlich, zu was die einzelnen Buttons gehören. Gib den richtige Namen wie ButtonAbfrageSubstantiv oder was weiß ich was was dir gefällt, aber irgendeinen Namen, der dir es ermöglicht auch nach einem Monat sofort Bescheid zu wissen, was der Button tun soll. Mit der Codevervollständigung sind auch lange Namen kein Problem, einfach den Anfang eingeben und STRG+Leertaste drücken und das Codevervollständigungsfenster geht auf und du kannst dort deinen Befehl/Variable/Komponente auswählen.
Das gleiche betrifft Variablen wie z1, z2 … für was sind die gut?
2. Thema Codeformatierung
												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 
 | procedure TForm1.Button11Click(Sender: TObject);var z22,z23: integer;
 unregabfrage: tstringlist;
 begin
 if button11.Caption = 'OK' then begin
 t5 := edit1.text;
 inc(mantworten);
 if z2 = 5 then else
 t7 := t6+t4;
 
 if t5 = t7 then begin inc(rantworten); Label10.Caption := 'richtig'; end else begin inc(fantworten); Label10.Caption := 'falsch';
 if sound = 1 then sndPlaySound(PChar('tabularium\rq.wav'),SND_ASYNC); end;
 edit1.text := '';
 edit1.SetFocus;
 end;
 
 
 z1:= random(5) + 1;
 z2:= random(5) + 1;
 z5:= random(2) + 1;
 if z2 = 5 then
 begin
 unregabfrage := tstringlist.create;
 case z1 of
 1: t1 := 'Nominativ';
 2: t1 := 'Genetiv';
 3: t1 := 'Dativ';
 4: t1 := 'Akkusativ';
 5: t1 := 'Ablativ';
 end;
 case z5 of
 1: t3 := 'Singular';
 2: t3 := 'Plural';
 end;
 z3 := unregsub.Count; z4 := random(z3);
 t2 := unregsub.strings[z4];
 Label9.Caption := 'Der ' + t1 + ' ' + t3 + ' von ' + t2 + '!';
 if t3 = 'Singular' then z22 := 0 else z22 := 5;
 case z1 of
 1: z22 := z22 + 1;
 2: z22 := z22 + 2;
 3: z22 := z22 + 3;
 4: z22 := z22 + 4;
 5: z22 := z22 + 5;
 end;
 unregabfrage.LoadFromFile('tabularium\' + t2);
 z23 := z22 - 1;
 t7 := unregabfrage.Strings[z23];
 
 end
 else
 …
 | 
		
	  
Du findest dich hier zurecht 

 ? Respekt.  Warum rückst du die Code nicht ein? Es hat zwar jeder seine Vorlieben, wie er was einrückt, aber es werden sich alle einig sein, das keine Einrückung großer Mist ist. Lies dir das mal durch 
www.delphi-source.de...undlagen/styleguide/
		                     
             Delphi-Quelltext
                        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:
 25:
 26:
 27:
 
 | procedure TForm1.Button11Click(Sender: TObject);var z22,z23: integer;
 unregabfrage: tstringlist;
 begin
 if button11.Caption = 'OK' then
 begin
 t5 := edit1.text;
 inc(mantworten);
 if z2 = 5 then
 else
 t7 := t6+t4;
 
 if t5 = t7 then
 begin
 inc(rantworten);
 Label10.Caption := 'richtig';
 end
 else
 begin
 inc(fantworten);
 Label10.Caption := 'falsch';
 if sound = 1 then sndPlaySound(PChar('tabularium\rq.wav'),SND_ASYNC);
 end;
 edit1.text := '';
 edit1.SetFocus;
 end;
 .......
 | 
		
	  
Das sieht doch gleich viel übersichtlicher aus, oder? 
Codeformatierung ist mit Delphi nicht wirklich ein Problem. Um nachträglich Blöcke einzurücken: textmarkieren und mit STRG+Umschalt+I gehts nach links und mit STRG+Umschalt+U nach links.
3. 
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 
 |       if z2 = 5 thenelse
 t7 := t6+t4;
 | 
		
	  
Was bezweckst du hier  mit dem else und der leeren Anweisung? Warum schreibst du nicht gleich 
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:
 |   If z2 <>5 then t7 := t6+t4;					 | 
		
	  
4. Die vielen Groupboxen. Freunde dich mal mit einem Pagecontol an. 
Pagecontrol auf die Form, mit rechtsklick drauf und neue seiten hinzugügen. Dort packst du dann deine Komponenten drauf und kannst sowohl bei der Entwurfszeit und Laufzeit einfach zwischen den Seiten wechseln. Um deine Groupboxen da rein zu bekommen, klick eine an, Strg+X, das entsprechende Tabsheet anklicken und STRG+V, schwupps ist es drin. Um zur Laufzeit die Reiter auszublenden such mal im Forum 
 PAGECONTROL REITER
 PAGECONTROL REITER, da gibt es einige Beiträge. Bei den Auswahlbuttons links schreibst du dann einfach 
pagecontrol.activepageindex := … und kannst so die Seite wechseln. Damit sparst du dir dieses vielen groupbox.visible und dein Programm wird zur Entwurfszeit auch wesentlich übersichtlicher.
5. 
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 
 | vokabellistez.LoadFromFile('tabularium/vokabellistez.txt');vokabellistel.LoadFromFile('tabularium/vokabellistel.txt');
 | 
		
	  
Das ist auch nicht richtig. Du nutzt hier den aktuellen Pfad, der kann sich aber ändern. Besser ist es, den kompletten Pfad zu übergeben. Am einfachsten mit dem Pfad der anwendung  (ExtractFilePath(Application.ExeName) )
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:
 | vokabellistez.LoadFromFile(ExtractFilePath(Application.ExeName)+ 'tabularium/vokabellistez.txt');					 | 
		
	  
Ansonsten kannst du hier mal böse Überaschungen erleben und deine Files werden sonstowo gespeichert. Viel Spaß beim Suchen 
 
 
6. Bei manchen sachen wie z.B. bei den Filestreams fehlen teilweise die try-Blöcke
www.delphi-source.de/tutorials/exceptions/
7. suchen in Stringlisten:
Gugg dir mal Tstrings.indexof inder Hilfe an. Damit geht das einfacher. Indexof unterscheidet außerdem nicht zwischen groß und kleinschreibung.
So das wars erstmal, mehr fällt mir nicht ein und mehr sehe ich auch nicht, da mir dein Quelltext viel zu unübersichtlich ist und mir auch Kommentierungen fehlen, damit ich gleich weiß, wo was wie gemacht wird.
MfG Frank