Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Vokabel Trainer ! Hilfe (https://www.delphipraxis.net/169035-vokabel-trainer-hilfe.html)

Fredmaster 25. Jun 2012 17:42

Vokabel Trainer ! Hilfe
 
Ich habe hier einen Vokabel trainer zusammengebaut...Ich kapiere nur nicht wo hier genau die fehler meldung herkommt?
Wenn ich Versuche die Vokabel u üebrprüfen(submit) dann kommt die fegler meldung "EAccessViolation"
Überhaupt funktioniert das Program noch nicht perfekt, die vokabeln werden noch nicht aus der textdatei ausgelesen bzw nicht angezeigt?!
Danke für eure Hilfe

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TVokabeltrainer = class(TForm)
    l_frage: TLabel;
    l_checkup: TLabel;
    l_antwort: TLabel;
    b_submit: TButton;
    b_next: TButton;
    b_cheat: TButton;
    b_text: TButton;
    OpenDialog1: TOpenDialog;
    ListBox1: TListBox;
    l_loesung: TEdit;
    RadioGroup1: TRadioGroup;
    procedure FormCreate(Sender: TObject);
    procedure b_submitClick(Sender: TObject);
    procedure b_nextClick(Sender: TObject);
    procedure b_cheatClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

const
  max=8;
 
var
  Vokabeltrainer: TVokabeltrainer;
  datei: TextFile;
  DateiName: string;
   a_vok: Array of String;          
   a_antwort: Array of String;      
   a_richtig: Array of Integer;      
   nr: Integer;                    
   voc: TStringList;



implementation

{$R *.DFM}


procedure TVokabeltrainer.FormCreate(Sender: TObject);
var max: integer;
begin                                    

      If OpenDialog1.execute then          
        Dateiname:=opendialog1.filename
     else
        Dateiname:='voc.txt';
        voc:=TStringlist.create;                        
        voc.LoadFromFile(Dateiname);                    
        max:=voc.count div(5);
        nr:=random(max-1);                              
        l_frage.caption:='Vokabel: ' + voc[nr*5];        
        radiogroup1.items[0]:=voc[nr*5+1];              
        radiogroup1.items[1]:=voc[nr*5+2];              
        radiogroup1.items[2]:=voc[nr*5+3];              

     nr:=random(max)+1;                            
     l_frage.caption:='Vokabel: ' + a_vok[nr*5];  
     radiogroup1.items[0]:=a_antwort[nr*5+1];
     radiogroup1.items[1]:=a_antwort[nr*5+2];
     radiogroup1.items[2]:=a_antwort[nr*5+3];
     radiogroup1.itemindex:=-1;

end;


procedure TVokabeltrainer.b_cheatClick(Sender: TObject);
begin                                                    

     l_checkup.caption:='how about "' + a_antwort[nr, a_richtig[nr]] + '"?';
     l_checkup.font.color:=clblack;
     l_checkup.font.size:=10;
end;


procedure TVokabeltrainer.b_submitClick(Sender: TObject);
begin                                          
     If (Radiogroup1.itemindex=-1) and (l_loesung.text='') then                  
     begin
           l_checkup.caption:='Bitte eine Auswahl treffen';
           l_checkup.font.color:=clblack;
     end
     else
           If (Radiogroup1.itemindex=a_richtig[nr]-1) or (l_loesung.text=a_antwort[nr, a_richtig[nr]] ) then
           begin
                l_checkup.caption:='Richtig!';
                l_checkup.font.color:=clgreen;
           end
     else                                                
           begin
                l_checkup.caption:='Falsch!';
                l_checkup.font.color:=clred;
           end;

end;

procedure TVokabeltrainer.b_nextClick(Sender: TObject);
begin                                          
     nr:=random(max)+1;
     l_frage.caption:='Vokabel: ' + a_vok[nr*5];
     radiogroup1.items[0]:=a_antwort[nr*5+1];
     radiogroup1.items[1]:=a_antwort[nr*5+2];
     radiogroup1.items[2]:=a_antwort[nr*5+3];
     radiogroup1.itemindex:=-1;
     l_checkup.caption:='';
     l_loesung.Text:='';

end;

end.

alleinherrscher 25. Jun 2012 17:46

AW: Vokabel Trainer ! Hilfe
 
Hi und willkommen. Warum machst du 3 Beiträge auf? Deine dynamischen Arrays sind nicht initialisiert.

DeddyH 25. Jun 2012 18:03

AW: Vokabel Trainer ! Hilfe
 
Und dann auch noch Crosspost (auch dort 2 Mal). So macht man sich keine Freunde.

EWeiss 25. Jun 2012 18:17

AW: Vokabel Trainer ! Hilfe
 
Ich kapiere es nicht.
Wenn ich fragen stelle in der letzten zeit bekomme ich keine Antworten mehr.
Hier werden direkt 3 Themen erstellt aund alle posten fleißig drauf los.

Scheint doch was zu bewirken.

Spaming Postings.

gruss

DeddyH 25. Jun 2012 18:21

AW: Vokabel Trainer ! Hilfe
 
Vielleicht hast Du nur die falschen Probleme :mrgreen:

EWeiss 25. Jun 2012 18:36

AW: Vokabel Trainer ! Hilfe
 
Zitat:

Zitat von DeddyH (Beitrag 1172368)
Vielleicht hast Du nur die falschen Probleme :mrgreen:

Das hat was für sich ;)
Na ja es ist ja kein Zwang das jemand helfen muss
Aber ist schon verwunderlich wie die Leute dann auf solche mehr Postings reagieren .. Fast ein Zwang?

Gruss

Fredmaster 25. Jun 2012 18:48

AW: Vokabel Trainer ! Hilfe
 
Danke für die schnellen Antworten! Das mit den 3 Threads tut mir wirklich leid...Ich muss das problem nur schnell gelöst haben! Tut mir leid, nächstes mal werde ich das nicht wieder machen!

Genau das ist mein Problem! Ich weis leider nicht wie ich diese arays initialisiere?

himitsu 25. Jun 2012 18:54

AW: Vokabel Trainer ! Hilfe
 
Zitat:

Zitat von himitsu (Beitrag 1172366)
Ich würde dir empfehlen mal zwei andere aktuelle Themen durchzulesen.

http://www.delphipraxis.net/169023-f...owmessage.html (vorallem Antwort #3)

http://www.delphipraxis.net/169026-s...erletzung.html (hier hat jemand den selben Fehler gemacht)





Delphi-Referenz durchsuchenSetLength

Wenn du schon dynamische Arrays verwendest, dann solltest du da auch Speicher reservieren, bevor du da was reinmachst und beim Auslesen sollte man nur auf existierende Felder zugreifen.

Damit nun alles zusammen ist.

Zitat:

Zitat von Fredmaster (Beitrag 1172376)
Ich weis leider nicht wie ich diese arays initialisiere?

Natürlich wurde das noch von Keinem erwähnt. :roll:

DeddyH 25. Jun 2012 18:56

AW: Vokabel Trainer ! Hilfe
 
In welchem Forum soll ich denn nun antworten? :gruebel:

alleinherrscher 25. Jun 2012 19:04

AW: Vokabel Trainer ! Hilfe
 
Zitat:

Zitat von Fredmaster (Beitrag 1172376)
Ich weis leider nicht wie ich diese arays initialisiere?

Wenn du zum Beispiel 3 Einträge in deinem Array haben willst, musst du zunächst im Speicher Platz dafür schaffen:

setlength(myarray,3);

anschließend kannst du auf die Einträge myarray[0], myarray[1] und myarray[2] zugreifen. myarray[3] gibt es nicht, weil es ja das 4. Element wäre. Also immer aufpassen: von 0 aus zählen.

mit length(myarray) kannst du abfragen, wie lang dein array ist.

Gruß, Michael

Fredmaster 25. Jun 2012 20:37

AW: Vokabel Trainer ! Hilfe
 
Blöde frage, aber wo füge ich set length überhaupt ein? Bei den variablen, oder bei formcreate? Ich glaube ich weis nämlich nun was mein problem ist. Ich glaube er liest die datei und dann macht er nichts, das heist er fürgt den text bzw die vokabeln nicht in das program ein!

haentschman 25. Jun 2012 20:48

AW: Vokabel Trainer ! Hilfe
 
Zitat:

Blöde frage, aber wo füge ich set length überhaupt ein?
...jedenfalls bevor du etwas mit dem Array anfängst. Wo ist dann letztlich egal. 8-)

p80286 25. Jun 2012 20:52

AW: Vokabel Trainer ! Hilfe
 
Ich denke, da liegst Du ganz richtig.
Falls Du mit "Programm" A_Antwort meinst, ich habe nirgendwo gesehen, daß Du den Inhalt von der Stringliste dorthin überträgst.

Versuch doch mal auf einem Blatt Papier den Ablauf Deines Programms zu skizzieren, und setze das in ein Delphiprogramm um.

Gruß
K-H

Fredmaster 25. Jun 2012 21:01

AW: Vokabel Trainer ! Hilfe
 
Wie übertrage ich den den inhalt der stringliste auf a_antwort? ich glaube das würde mir immens weiterhelfen!

blawen 26. Jun 2012 08:04

AW: Vokabel Trainer ! Hilfe
 
Zitat:

Zitat von Fredmaster (Beitrag 1172397)
Wie übertrage ich den den inhalt der stringliste auf a_antwort? ich glaube das würde mir immens weiterhelfen!

Ich empfehle Dir, Dich ein wenig mit den Grundlagen vertraut zu machen.
Einen guten Einstieg dafür ist das eBook DelphiStarter (S. 73ff)

p80286 26. Jun 2012 09:46

AW: Vokabel Trainer ! Hilfe
 
Zitat:

Zitat von Fredmaster (Beitrag 1172397)
Wie übertrage ich den den inhalt der stringliste auf a_antwort? ich glaube das würde mir immens weiterhelfen!

wie wäre es z.b. mit
Delphi-Quellcode:
a_antwort[1]:=avoc[1];
vorher nicht vergessen
Delphi-Quellcode:
setlength
zu verwenden!

Und noch einmal meine dringender Hinweis mach Dir Gedanken über das Konzept Deines Programms. so wie das bisher ausschaut wird dan nichts vernünftiges draus.

Gruß
K-H

Fredmaster 26. Jun 2012 22:17

AW: Vokabel Trainer ! Hilfe
 
Danke für die vielen Antworten! Ich habe mich nun nach reifer Überlegung dazu entschieden das Program doch mithilfe einer listbox zu gestalten! Dies klappt auch schon fast mit allen Funktionen. Hier ist mein jetziger code...Nur ein problem hab ich noch und zwar bei dem submit button...hier ist der fehler er sagt dass int und string nicht zusammen passen, wenn ich jedoch den string umwandle hat er tstring und stirng pobleme? irgendwelche ideen?


Hier die Fehlerstelle

Delphi-Quellcode:
 If (radiogroup1.items:=a_richtig[i+3]) or (l_loesung.text:=a_richtig[i]) then // richtige Antwort
           begin
                l_checkup.caption:='Richtig!';
                l_checkup.font.color:=clgreen;
           end
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TVokabeltrainer = class(TForm)
    b_next: TButton;
    b_Cheat: TButton;
    b_submit: TButton;
    l_frage: TLabel;
    l_checkup: TLabel;
    l_antwort: TLabel;
    l_losungdirekt: TLabel;
    RadioGroup1: TRadioGroup;
    OpenDialog1: TOpenDialog;
    l_loesung: TEdit;
    ListBox1: TListBox;
    l_Check: TLabel;
    VocListe: TButton;
    l_cheat: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure b_submitClick(Sender: TObject);
    procedure b_nextClick(Sender: TObject);
    procedure b_CheatClick(Sender: TObject);
    procedure VocListeClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

const
  max=8;
 
var
  Vokabeltrainer: TVokabeltrainer;
  datei: TextFile;
  DateiName: string;
  a_vok: Array[1..max] of String;           // hier werden die Vokabeln/Fragen gespeichert
  a_antwort: Array[1..max] of String; // hier werden die Antwortmöglichkeiten gespeichert
  a_richtig: Array[1..max] of String;
  i: Integer;



implementation

{$R *.dfm}

procedure TVokabeltrainer.FormCreate(Sender: TObject);

begin                                     // Vokabeln, Antwortmöglichkeiten und richtige Antworten werden hier ausgegeben

       if MessageDlg('Bitte wählen sie jetzt eine Vokabel-Liste zum Üben aus',mtInformation, [mbOK], 0) =mrYES then
       l_cheat.Visible:=false;           //zeigt die Cheat option NOCH nicht an

       if OpenDialog1.Execute then { Dialog zum Dateiöffnen anzeigen }

      begin
       AssignFile(Datei, OpenDialog1.FileName); { Datei ausgewählt }
       Reset(datei);
       Readln (Datei, a_vok[i]); //Readln(datei, dateiname); { Erste Zeile der Datei lesen }
       Readln (Datei, a_antwort[i]);
       Readln (Datei, a_antwort[i+1]);
       Readln (Datei, a_antwort[i+2]);
       Readln (Datei, a_richtig[i+3]);
        radiogroup1.items[0]:=a_antwort[i];
        radiogroup1.items[1]:=a_antwort[i+1];
        radiogroup1.items[2]:=a_antwort[i+2];
       l_frage.caption:='Übersetze  ' + a_vok[i];

     end;



end;

procedure TVokabeltrainer.VocListeClick(Sender: TObject);
begin                                     // Vokabeln, Antwortmöglichkeiten und richtige Antworten werden hier ausgegeben
       if OpenDialog1.Execute then { Dialog zum Dateiöffnen anzeigen }

       begin
          AssignFile(Datei, OpenDialog1.FileName); { Datei ausgewählt }
       Reset(datei);
       Readln (Datei, a_vok[i]); //Readln(datei, dateiname); { Erste Zeile der Datei lesen }
       Readln (Datei, a_antwort[i]);
       Readln (Datei, a_antwort[i+1]);
       Readln (Datei, a_antwort[i+2]);
       Readln (datei, a_richtig[i+3]);
        radiogroup1.items[0]:=a_antwort[i];
        radiogroup1.items[1]:=a_antwort[i+1];
        radiogroup1.items[2]:=a_antwort[i+2];
       l_frage.caption:='Übersetze  ' + a_vok[i];
     end;


end;


procedure TVokabeltrainer.b_submitClick(Sender: TObject);  // überprüft die Antwort aus dem Auswahlmenü
begin


     If (Radiogroup1.itemindex=-1) and (l_loesung.text='') then      // keine Antwort angegeben
     begin
           l_checkup.caption:='Bitte eine Auswahl treffen';
           l_checkup.font.color:=clblack;
     end
     else
           If (radiogroup1.items:=a_richtig[i+3]) or (l_loesung.text:=a_richtig[i]) then // richtige Antwort
           begin
                l_checkup.caption:='Richtig!';
                l_checkup.font.color:=clgreen;
           end
     else                                                 // falsche Antwort
           begin
                l_checkup.caption:='Falsch!';
                l_checkup.font.color:=clred;
           end;

end;


procedure TVokabeltrainer.b_nextClick(Sender: TObject);
begin                                           // nächste Frage anzeigen
     //i:=random(max)+1;
     l_frage.caption:='Vokabel: ' + a_vok[i];
     radiogroup1.items[0]:=a_antwort[i+1];
     radiogroup1.items[1]:=a_antwort[i+2];
     radiogroup1.items[2]:=a_antwort[i+3];
     radiogroup1.itemindex:=-1;
     l_checkup.caption:='';
     l_loesung.Text:='';

end;

procedure TVokabeltrainer.b_CheatClick(Sender: TObject);
begin                                             // gibt die richtige Lösung aus

     l_cheat.caption:='How about:  ' + a_antwort[a_richtig[i+4]] ;
     l_cheat.font.color:=clblack;
     l_cheat.font.size:=16;
     l_cheat.font.size:=16;

end;


end.

Bummi 26. Jun 2012 22:56

AW: Vokabel Trainer ! Hilfe
 
Ich bin zu müde jetzt alles nachzuvollziehen. Was mir auffällt:
- was machst Du mit dem i ?, ich sehe nicht dass i irgendwo verändert wird
- If (radiogroup1.items:=a_richtig[i+3]) or (l_loesung.text:=a_richtig[i])
verglichen wird mit = nicht mit := (dies ist für Zuweisungen)
radiogroup1.items ist eine Stringlist(bzw. TStrings) auf einen String darin greifst Du per
radiogroup1.items[0] oder radiogroup1.items[i] oder radiogroup1.items[radiogroup1.Itemindex] zu

Du könntest auch direkt über die Indizes radiogroup1.Itemindex=i vergleichen wenn denn i einen sinnvollen Wert enthielte

p80286 27. Jun 2012 09:26

AW: Vokabel Trainer ! Hilfe
 
Trotz der zarten Andeutungen scheinst Du immer noch nicht zu wissen was Du tust.
Schau Dir einmal das Form.Create an.
Da wird eine globale Variable I als Index für ein Array genutzt.
Es ist nicht ersichtlich wo irgendwo I ein Wert zugewiesen wird.
Dann öffnest Du zwar eine Vokabeldatei, aber das zugehörige
Delphi-Quellcode:
Closefile
ist nirgendwo zu finden.

So wird das nichts.
Schau Dir mal ein Grundlagentutorial an, besser arbeite es einmal durch!

Gruß
K-H

Fredmaster 28. Jun 2012 17:35

AW: Vokabel Trainer ! Hilfe
 
Danke für alle Antworten! Ich bin fertig und alles funktioniert!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 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