![]() |
Re: Vokabeltrainer
Danke, klappt.
Wie verknüpfe ich ein anderes Fenster mit meinem? |
Re: Vokabeltrainer
Neue Frage, neuer Thread bitte...
|
Re: Vokabeltrainer
Hat jemand von euch einmal die Abfrage ausprobiert?
Wie kommt es, dass wenn man nichts eingibt, also der Dialog zum überspringen angezeigt wird, dieser Dialog sehr häufig angezeigt wird? |
Re: Vokabeltrainer
Ich hab ehrlich gesagt gar nichts probiert, da ich das Programm nicht verstanden habe :mrgreen:
|
Re: Vokabeltrainer
Mit statischen Pfaden wirst du nichts!
Auch wenn ich wieder Luckie auf mich hetze mit der Aussage ( :mrgreen: ): Benutzte statt den statischen Pfad bitte den Programmorder. Denn bekommst du indem du den Ort der exe (also C:\<Pfad>\<die exe>.exe) nimmst (ParamStr(0)) und nur den Pfad rausschneidest (ExtractFilePath(<Ort>)). Weil selbst in "C:\Programme" habe ich ohne weiteres keine Schreibrechte! Übrigens gewöhne dir an wenigstens etwas und auch sinnvoll einzurücken. Ich will dich nicht runtermachen, aber wenn man gewisse Standards einhälst kommst du eher mit uns :stupid: und auch mit den Code zurecht. Um Luckie glücklich zu machen ( :mrgreen: ): Ich würde als Option für den Benutzer anbieten wo er speichern möchte. Dabei hast du zwischen 3 Pfaden die auswahl:
Zu den Anwendungsdaten: Verwende nie sowas statisch: C:\Dokumente und Einstellungen\blender\Anwendungsdaten\Vokabeltrain er\ Weil ein anderer XP/2000 user hätte dann einenen neuen Pfad. Bei mir wäre es statt "blender" "xZise" oder "Fabian" (ältere ^^). Außerdem haben wir in der Schule die Eigenen Dateien auf D:\! Und unter Vista wäre es: [i]C:\Users\xZise\Appdata\Roaming[i] Also wieder was ganz anderes. Tipp: ![]() MfG xZise |
Re: Vokabeltrainer
Danke für den Tipp.
Mein Problem ist, dass, wenn die erste Vokabel richtig beantwortet wurde, die Abfrage nicht fortgesetzt wird. Außerdem werden die letzten Vokabeln gar nicht, b.z.w. weniger, abgefragt, wärend andere wiederum öfter als gewollt abgefragt werden. Eigentlich sollte für jede vorhandene Vokabel ein Zähler vereinbart sein. Wenn der Benutzer nun eine Falsche Vokabel eingibt, soll sich der Zähler dieser Vokabel erhöhen, damit effektiv gelernt werden kann. Bei einer richtigen Eingabe soll sich der Zähler um eins verringern. Wenn der Zähler auf null steht, wird die dazugehörige Vokabel nicht mehr abgefragt. Wieso geht das nicht??? |
Re: Vokabeltrainer
Hallo,
ich habe die abfrage neu Programmiert. Dabei sollen beim öffnen die Vokabeln, Sprachen, Schwierigkeiten etc. in verschiedenen Listen gespeichert werden. Nun tritt bie folgendem Code:
Delphi-Quellcode:
Folgender Fehler auf: Listenindex überschreitet das Maximum (14)
procedure TForm1.Abfragen1Click(Sender: TObject);
var gesamtedatei: TStringlist; datum: string; i: integer; begin try gesamtedatei := TStringlist.create; vokabelnf1 := TStringlist.create; vokabelnf2 := TStringlist.create; nochabzufr := TStringlist.create; if opendialog1.Execute then begin gesamtedatei.loadfromfile(opendialog1.FileName); if opendialog1.FileName[length(OpenDialog1.FileName) - 6] = '.' then begin //Format: .vocab datum:= DateTimeToStr(now); Sprache1:= gesamtedatei[0]; Sprache2:= gesamtedatei[1]; for i := 2 to gesamtedatei.count do begin if i mod 2 = 2 then Vokabelnf1.add(gesamtedatei[i]) else Vokabelnf2.add(gesamtedatei[i]); end; for i := 0 to vokabelnf1.count do nochabzufr.Add('3'); end else begin //Format: .vocab1 datum:= gesamtedatei[0]; Sprache1:= gesamtedatei[1]; sprache2:= gesamtedatei[2]; for i := 3 to ((gesamtedatei.count - 2)div 3)+2 do Vokabelnf1.add(gesamtedatei[i]); for i := (3 +((gesamtedatei.count - 2) div 3)) to (((gesamtedatei.count- 2)div 3)*2)do vokabelnf2.add(gesamtedatei[i]); for i := ((((gesamtedatei.count-2)div 3)*2)+3) to gesamtedatei.count do nochabzufr.add(gesamtedatei[i]); end; end; finally gesamtedatei.Free; end; speichern1.Enabled:= false; end; Ich kann mir das nicht erklähren. |
Re: Vokabeltrainer
Wegen dem
Alter Code:
Delphi-Quellcode:
So...
Sprache2:= gesamtedatei[1];
for i := 2 to gesamtedatei.count do
Delphi-Quellcode:
Edit:
Sprache2:= gesamtedatei[1];
for i := 2 to gesamtedatei.count-1 do //Count-1 Natürlich auch...
Delphi-Quellcode:
lg
for i := 0 to vokabelnf1.count-1 do
|
Re: Vokabeltrainer
Wie bearbeitet Delphi das denn?
Ich muss wahrscheinlich doch noch etwas ändern, damit das Programm korrekt einliest, oder? |
Re: Vokabeltrainer
Hallo,
ich habe die Abfrage neu Programmiert, komme aber nun nicht mehr mit Haltepunkten weiter:
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var auswahl, gessum: integer; sprach1, sprach2, eingabe: string; richtanz: Boolean; label 1; begin ZaeleNochAbzuFr(nochabzufr, gessum); RandomVokabel(nochabzufr, auswahl); if gessum > 0 then begin ChangeVokabel(auswahl, radiogroup1.ItemIndex, sprache1, sprache2, sprach1,sprach2); 1: begin FrageAb(Vokabel1, Sprach1, Sprach2, Eingabe); VergleicheVokabel(eingabe, vokabel2, checkbox1.checked, fehler, richtanz); if (not richtanz) and (eingabe <> '') then goto 1; if eingabe <> '' then begin ShowMessage(sprach1 + ' - '+ sprach2 +#10#13+ vokabel1 + ' - '+vokabel2+#10#13+'Es werden noch '+inttostr(gessum)+' Vokabeln abgefragt.'+#10#13+'Du hast '+inttostr(fehler) {Hier zeigt sich der Fehler.} +' falsche Buchstaben eingegeben.'); end; end; end; end;
Delphi-Quellcode:
procedure TForm1.VergleicheVokabel (Vokabel1, Vokabel2: String; FilterLeerZeichen: Boolean; var Fehler: Integer; var KonnteVergleichen: Boolean);
var i, j, gesamtfehler: Integer; Moeglichkeiten, Moeglichkeiten1, fehlerpromoegl: TStringList; begin gesamtfehler:=0; Moeglichkeiten := TStringlist.Create; Moeglichkeiten1 := TStringlist.Create; fehlerpromoegl := TStringlist.Create; GetMoeglichkeiten(Eingabe, filterleerzeichen, Moeglichkeiten); GetMoeglichkeiten(Vokabel2, filterleerzeichen, Moeglichkeiten1); KonnteVergleichen := Moeglichkeiten.Count=Moeglichkeiten1.Count; if KonnteVergleichen then begin //Vergleiche for i := 0 to Moeglichkeiten.Count-1 do begin for j := 0 to moeglichkeiten1.count-1 do begin fehler:=0; VergleicheMoeglichkeit(Moeglichkeiten1[i], moeglichkeiten[j], Fehler); FehlerProMoegl.Add(inttostr(fehler)); end; end; end; for i := 0 to moeglichkeiten.count-1 do begin fehler := StrToInt(FehlerProMoegl[i*moeglichkeiten.count]); for j := 0 to moeglichkeiten1.count-1 do begin if StrToInt(FehlerProMoegl[i*moeglichkeiten.count+j]) < fehler then fehler := StrToInt(FehlerProMoegl[i*moeglichkeiten.count+j]); end; inc(GesamtFehler, Fehler); end; fehler := gesamtfehler; end;
Delphi-Quellcode:
procedure TForm1.GetMoeglichkeiten (Vokabel: String; LeerzFiltern: Boolean; Var Moeglichkeiten: TStringlist);
var i: Integer; Moeglichkeit, Filter: String; begin Filter:=''; if leerzfiltern then begin for i := 1 to Length(Vokabel) do begin if vokabel[i] <> ' ' then Filter:=filter+vokabel[i]; end; Vokabel := filter; end; for i := 1 to Length(Vokabel) do begin if (Vokabel[i]<>',') and (vokabel[i] <> ';') then Moeglichkeit := Moeglichkeit + Vokabel[i] else begin Moeglichkeiten.Add(Moeglichkeit); Moeglichkeit:=''; end; end; Moeglichkeiten.Add(Moeglichkeit); Moeglichkeit:=''; end;
Delphi-Quellcode:
procedure TForm1.VergleicheMoeglichkeit (Moegl1, Moegl2: String; var Fehler: integer);
var i, ausgleich: Integer; begin ausgleich := 0; Fehler := 0; for i := 1 to length(moegl1) do begin if i+ausgleich > length(moegl2) then inc(fehler) else begin if UpperCase(moegl1[i]) <> UpperCase(moegl2[i + ausgleich]) then begin inc(Fehler); if uppercase(moegl1[i]) = uppercase(moegl2[i + ausgleich - 1]) then begin dec(ausgleich); dec(fehler); end else if uppercase(moegl1[i]) = uppercase(moegl2[i + ausgleich + 1]) then begin inc(ausgleich) end; end; end; end; end;
Delphi-Quellcode:
procedure TForm1.ChangeVokabel(auswahl, WasZuWas: integer; sprache1, sprache2: string; var sprach1, sprach2: string);
begin case WasZuWas of 0: begin vokabel1 := vokabelnf1[auswahl]; sprach1 := sprache1; vokabel2 := vokabelnf2[auswahl]; sprach2 := sprache2; end; 1: begin vokabel2 := vokabelnf1[auswahl]; sprach2 := sprache1; vokabel1 := vokabelnf2[auswahl]; sprach1 := sprache2; end; 2: begin case random(2) of 0: begin vokabel1 := vokabelnf1[auswahl]; sprach1 := sprache1; vokabel2 := vokabelnf2[auswahl]; sprach2 := sprache2; end; 1: begin vokabel2 := vokabelnf1[auswahl]; sprach2 := sprache1; vokabel1 := vokabelnf2[auswahl]; sprach1 := sprache2; end; end; end; end; end;
Delphi-Quellcode:
procedure TForm1.ZaeleNochAbzuFr (Werte: TStringlist; var Insgesamt: Integer);
var gessum, i: integer; begin gessum:=0; for i := 0 to werte.count-1 do gessum := gessum + strtoint(nochabzufr[i]); insgesamt:=gessum; end;
Delphi-Quellcode:
procedure TForm1.FrageAb (Vokabel1, Sprache1, Sprache2: String; var eingabe: string);
begin eingabe := InputBox('Abfrage... '+sprache1+' - '+sprache2,'Bitte übersetze folgende Vokabel aus dem '+sprache1+'en ins '+sprache2+'e: '+vokabel1,''); end;
Delphi-Quellcode:
Ich glaube, dass die Eingabe nicht richtig übergeben wird.
procedure TForm1.RandomVokabel (nochabzufr: TStringList; var auswahl: integer);
var gessum: integer; begin randomize; zaelenochabzufr(nochabzufr, gessum); auswahl := random(vokabelnf1.count-1); while (gessum > 0) and (strtoint(nochabzufr[auswahl]) <=0) do auswahl := random(vokabelnf1.count-1); end; Beim Kompilieren werden keine Fehler, Warnungen oder Hinweise angezeigt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr. |
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-2025 by Thomas Breitkreuz