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
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
1: 2: 3:
| if z2 = 5 then else t7 := t6+t4; |
Was bezweckst du hier mit dem else und der leeren Anweisung? Warum schreibst du nicht gleich
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, 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
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
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