Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Werte in Stringgrid auswerten? (https://www.delphipraxis.net/18908-werte-stringgrid-auswerten.html)

alanblack 25. Mär 2004 23:42


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:
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;
Wenn Ihr Ideen habt, wie ich das machen könnte wäre ich sehr dankbar über einen post von euch

Mit freundlichen Grüßen

alanblack

Luckie 26. Mär 2004 01:19

Re: Werte in Stringgrid auswerten?
 
Liste der Anhänge anzeigen (Anzahl: 1)
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. :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 13:47 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