AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Werte in Stringgrid auswerten?

Ein Thema von alanblack · begonnen am 26. Mär 2004 · letzter Beitrag vom 26. Mär 2004
Antwort Antwort
alanblack

Registriert seit: 31. Okt 2003
Ort: Reichertshausen (40km von münchen)
171 Beiträge
 
Delphi 7 Enterprise
 
#1

Werte in Stringgrid auswerten?

  Alt 26. Mär 2004, 00:42
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
Irren ist menschlich, programmieren göttlich
  Mit Zitat antworten Zitat
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, 02: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
Antwort Antwort


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 11:41 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