AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Vokabeltrainer
Thema durchsuchen
Ansicht
Themen-Optionen

Vokabeltrainer

Ein Thema von blender · begonnen am 29. Mär 2008 · letzter Beitrag vom 20. Mai 2008
Antwort Antwort
Seite 7 von 7   « Erste     567   
blender
Registriert seit: 25. Feb 2008
Hallo,
im Anhang ist mein Vokabeltrainer 1 Beta 3 (als .zip).
Man kann damit Vokabellisten erstellen und diese Später wieder Öffnen.
Auf Knopfdruck wird man Abgefragt.
Wenn man eine Vokabel falsch eintippt kommt diese einmal mehr wieder.
Wenn ein Buchstabe falsch, oder vergessen wird, akzeptiert das Programm dies als richtig.
Wenn die Vokabel in der Datei woanders existiert, wird auf eine Verwechslung hingewiesen und beide Vokabeln (die, welche gerade abgefragt wurde und die, mit der Verwechselt wurde) werden einmal mehr abgefragt.
Wenn eine Vokabel richtig eingegeben wurde, wird diese einmal weniger abgefragt.
Ist das so sinnvoll?
Bei keiner Eingabe wird nachgefragt ob die abfrage beendet werden soll.
Das funktioniert leider noch nicht so richtig.
Die Abfrage kommt Teilweise mehrere Male.
Es gibt auch noch andere Fehler.
Lasse
Angehängte Dateien
Dateityp: zip vokabeltrainer_957.zip (233,1 KB, 63x aufgerufen)
 
blender

 
Delphi 7 Personal
 
#61
  Alt 31. Mär 2008, 19:39
Danke, klappt.

Wie verknüpfe ich ein anderes Fenster mit meinem?
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

 
Delphi 2009 Professional
 
#62
  Alt 31. Mär 2008, 19:40
Neue Frage, neuer Thread bitte...
Manuel
  Mit Zitat antworten Zitat
blender

 
Delphi 7 Personal
 
#63
  Alt 31. Mär 2008, 20:07
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

 
Delphi 11 Alexandria
 
#64
  Alt 31. Mär 2008, 20:08
Ich hab ehrlich gesagt gar nichts probiert, da ich das Programm nicht verstanden habe
Detlef
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#65
  Alt 31. Mär 2008, 20:29
Mit statischen Pfaden wirst du nichts!
Auch wenn ich wieder Luckie auf mich hetze mit der Aussage ( ):
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 und auch mit den Code zurecht.

Um Luckie glücklich zu machen ( ):
Ich würde als Option für den Benutzer anbieten wo er speichern möchte.
Dabei hast du zwischen 3 Pfaden die auswahl:
  1. Festgelegter Pfad - z.B. eine andere HDD oder einfach ein anderer Ordner (Vorteil: Erfüllt mit 2. und 3. alle Kundenwünsche , Nachteil: Man muss nicht nur den Ordner des Programms löschen)
  2. Programmordner - Der Ordner indem dein Programm ist (Vorteil: Einfach zu löschen/managen, Nachteil: keine benutzerspezifischen Charakteritika)
  3. Anwendungsdaten - Der Ordner wovon jeder Benutzer ein hat. Einfach in die Addressleiste "%appdata%" eingeben (s.u.). (Vorteil: Benutzerspezfisch und garantierte Schreibrechte, Nachteil: Je nach Betriebssystem anders und man muss dannach extra suchen)

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: HOMEDIR - Das unbekannte Verzeichnis

MfG
xZise
Fabian
  Mit Zitat antworten Zitat
blender

 
Delphi 7 Personal
 
#66
  Alt 1. Apr 2008, 14:41
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???
  Mit Zitat antworten Zitat
blender

 
Delphi 7 Personal
 
#67
  Alt 15. Apr 2008, 18:54
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:
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;
Folgender Fehler auf: Listenindex überschreitet das Maximum (14)
Ich kann mir das nicht erklähren.
  Mit Zitat antworten Zitat
IceTube
 
#68
  Alt 15. Apr 2008, 21:45
Wegen dem

Alter Code:
Delphi-Quellcode:
Sprache2:= gesamtedatei[1];
     for i := 2 to gesamtedatei.count do
So...

Delphi-Quellcode:
Sprache2:= gesamtedatei[1];
     for i := 2 to gesamtedatei.count-1 do //Count-1
Edit:

Natürlich auch...
for i := 0 to vokabelnf1.count-1 do lg
  Mit Zitat antworten Zitat
blender

 
Delphi 7 Personal
 
#69
  Alt 16. Apr 2008, 15:44
Wie bearbeitet Delphi das denn?
Ich muss wahrscheinlich doch noch etwas ändern, damit das Programm korrekt einliest, oder?
  Mit Zitat antworten Zitat
blender

 
Delphi 7 Personal
 
#70
  Alt 20. Mai 2008, 17:15
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:
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;
Ich glaube, dass die Eingabe nicht richtig übergeben wird.
Beim Kompilieren werden keine Fehler, Warnungen oder Hinweise angezeigt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 7 von 7   « Erste     567   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:04 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