Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Werte in Stringgrid auswerten?

  Alt 26. Mär 2004, 01:19
Meine Version eines Vokabeltrainers würde so aussehen:
Delphi-Quellcode:
// 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;
Im Anhang das ganze Projekt.

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.

PPS: Ich übernehme keine Garantie auf Effektivität und Schönheit des Quellcodes, der ist innerhalb einer Stunde mal so entstanden.
Angehängte Dateien
Dateityp: zip vokabeltrainer.zip (3,2 KB, 5x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat