![]() |
Werte in Stringgrid auswerten?
Hallo Leute,
Ich habe ein Problem. Ich hoffe ich kann es so beschreiben dass ihr mich auch versteht. Also: Ich arbeite gerade an einen vokabeltrainer, mit dem man seine zu lernenden vokabeln eintragen kann und dann auch als training sich abfragen lassen kann. Das habe ich bereits fertig und möchte dass am schluss eine "Bewertung" kommt (nachdem alle eingetragenden vokabeln abgefragt worden sind) Diese Bewertung sollte folgendes enthalten: "Vokabeln insgesamt" "Richtig übersetzte Vokabeln" und "falsch übersetzte vokabeln" Dann noch ein Label mit "Du hast zu __% richtig übersetzt". Leider habe ich keinen Schimmer wie ich das machen könnte. Hier einmal einen Teil Code von der Abfrage:
Delphi-Quellcode:
Wenn Ihr Ideen habt, wie ich das machen könnte wäre ich sehr dankbar über einen post von euch
procedure TForm3.Button1Click(Sender: TObject);
begin //false.pas -> Label7 'Deine Eingabe' Form6.Label7.Caption := Edit1.Text; Form6.Label5.Caption := question; Form6.Label6.Caption := answer; // richtige eingabe If UpperCase(answer) = UpperCase(Edit1.Text) Then //sonst else Form6.ShowModal; answer := Form1.StringGrid1.Cells[1,RecNo]; // question bekommt einen anderen Wert in der Zeile question := Form1.StringGrid1.Cells[0,RecNo]; LblWort.Caption := question; inc(RecNo); If RecNo >= Form1.StringGrid1.RowCount Then RecNo := 1; end; procedure TForm3.FormCreate(Sender: TObject); begin //beim starten der form... question := Form1.StringGrid1.Cells[0,RecNo]; LblWort.Caption := question; inc(RecNo); If RecNo >= Form1.StringGrid1.RowCount Then RecNo := 1; RecNo := 1; Mit freundlichen Grüßen alanblack |
Re: Werte in Stringgrid auswerten?
Liste der Anhänge anzeigen (Anzahl: 1)
Meine Version eines Vokabeltrainers würde so aussehen:
Delphi-Quellcode:
Im Anhang das ganze Projekt.
// Record für eine Vokabel (englisch, deutsch, richtig/falsch)
type TVokabel = record eng: String; de: String; Correct: Boolean; end; // dyn. Array für alle Vokabeln aus der Datei var Vokabeln : array of TVokabel; procedure TForm1.FormCreate(Sender: TObject); var sl: TStringList; Loop: Cardinal; resourcestring rsEng = 'Englisch'; rsDe = 'Deutsch'; rsCorrect = 'richtig / falsch'; begin StringGrid1.Cells[0,0] := rsEng; StringGrid1.Cells[1,0] := rsDe; StringGrid1.Cells[2,0] := rsCorrect; sl := TStringList.Create; try // Vokabel-Datei in Stringliste laden sl.LoadFromFile(ExtractFilepath(ParamStr(0))+'lektion.txt'); // StringGrid anpasen StringGrid1.RowCount := sl.Count+1; // dyn. Array auf richtige Größe setzen SetLength(Vokabeln, sl.Count); // Datei durchgehen for Loop := 0 to Sl.Count-1 do begin // Zeilen die nicht dem Format: eng=de entsprechen überspringen if pos('=', sl.Strings[Loop]) = 0 then Continue; // Vokablen zu weisen Vokabeln[Loop].eng := copy(sl.Strings[Loop], 0, pos('=', sl.Strings[Loop])-1); Vokabeln[Loop].de := copy(sl.Strings[Loop], pos('=', sl.Strings[Loop])+1, length(sl.Strings[Loop])); // englischen schon eintragen StringGrid1.Cells[0, Loop+1] := Vokabeln[Loop].eng; end; finally // StringListe freigeben FreeAndNil(sl); end; end; procedure TForm1.StringGrid1Click(Sender: TObject); begin // Nur editieren zu lassen, wenn in der zweiten Spalte if StringGrid1.Col = 1 then StringGrid1.Options := StringGrid1.Options+[goEditing] else StringGrid1.Options := StringGrid1.Options-[goEditing]; end; procedure TForm1.btnCheckClick(Sender: TObject); var Loop: Cardinal; Wrong: Cardinal; // Anzahl falsche Vokabeln PercWrong: Double; // falsche Vokabeln in Prozent resourcestring rsWrong = 'falsch'; rsRight = 'richtig'; rsPercWrong = 'Es sind %.2f%% der Vokabeln falsch beantwortet worden.'; begin // auswerten Wrong := 0; for Loop := 0 to length(Vokabeln)-1 do begin // Vergleichen, natürlich nur sehr einfach. Es wird nicht berücksichtigt, // wenn Begriffe mehrere Bedeutungen haben (läßt auch der Aufbau der // Vokabel-Datei nicht zu). if StringGrid1.Cells[1,Loop+1] <> Vokabeln[Loop].de then begin // 'falsch' in die entsprechende Zeile schreiben StringGrid1.Cells[2,Loop+1] := rsWrong; // Vokabel im Array als falsch markieren Vokabeln[Loop].Correct := False; // Anzahl der falsche Vokabeln hochzählen Inc(Wrong); end else begin // 'richtig' eintragen StringGrid1.Cells[2,Loop+1] := rsRight; // Vokabel im Array als richtig markieren Vokabeln[Loop].Correct := True; end; end; // falschen in Listbox anzeigen Listbox1.Items.Clear; for Loop := 0 to length(Vokabeln)-1 do begin // wenn Vokabel als falsch markiert in Listbox übernehmen if Vokabeln[Loop].Correct = False then Listbox1.Items.Add(Vokabeln[Loop].eng) end; // Messagebox-Auswertung mit Prozent PercWrong := Wrong * 100 / length(Vokabeln); ShowMessage(Format(rsPercWrong, [PercWrong])); end; PS: Da ich keine Lust hatte einen kompletten Vokabeltrainer zu machen, ist der natürlich sehr einfach. Er berücksichtigt nicht, dass eine Vokabel mehrere Übersetzungen haben könnte und es geht nur in eine Richtung. Auch ist ein Editieren der Vokabelliste aus dem Programm nicht möglich. Sollte aber, entsprechenden Fleiß vorrausgesetzt, ausbaufähig sein. Das Ausbauen beschränkt sich eigentlich nur noch auf Tipparbeit und Ideen, die umgestzt werden wollen. :roll: PPS: Ich übernehme keine Garantie auf Effektivität und Schönheit des Quellcodes, der ist innerhalb einer Stunde mal so entstanden. :oops: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 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