Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

Quiz mit Delphi 6 Hilfe

geoli / 2 Antworten / Flachansicht Nickles

Ich bin Programmieranfänger und versuche gerade ein Quiz mit Delphi6 zu entwerfen.
Konkret: In einem Formular soll ein Label existieren in dass die Fragen kommen sollen, ein Edit-Fenster in der man die Antwort eingeben kann und einen Button zum Drücken nach Eingabe der Antwort. Fragen und Antworten sollen in einer INI-Datei gespeichert werden.
Borlander hat mir bisher sehr geholfen doch jetzt komm ich nicht weiter.
Hier mal mein Quelltext in dem es wahrscheinlich noch sehr chaotisch zugeht, vielleicht könnt ihr mir ein paar Tipps dazu geben:


unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
TIniFile;
TStringList;

implementation

{$R *.dfm}
begin
OnCreate Form1;
QuizData := TIniFile.Create(\'quiz.dat\');
Antwort := QuizData.ReadString(\'[quiz]\');
QuestionList := TStringList.Create;
ReadSection(\'quiz\');
ReadString(\'QuestionList\');
QuestionList[Nummer];
end


procedure TForm1.Button1Click(Sender: TObject);
begin
QuizData.Read(\'quiz\')
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
QuizData.free;
QuestionList.free;
Close;
end;

end.

Einerseits glaube ich, dass hier und da noch einige Buchstaben fehlen, und andererseits, dass
einige der Befehle an der falschen Stelle stehen. Vielen Dank für Eure Mühe im Voraus !!! geoli

bei Antwort benachrichtigen
Borlander geoli „Quiz mit Delphi 6 Hilfe“
Optionen

Erst mal zum Posten von -'-: die müssen nicht mit \ escaped werden, die werden nur in der Vorschau nicht richtig angezeigt...

Hast Du eigentlich mal probiert das Programm zu compilieren? Gibt diverse Fehlermeldungen. Ich werde das einfach mal der Reihe durchgehen:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; { bor: hier fehlt der Eintrag IniFiles, so kann können keine Objecte vom Type TIniFile verwendet werden }

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
TIniFile;
TStringList;
{ bor: Variablen werden folgendermaßen deklariert:
%Bezeichner% : %Typ% ;
}

implementation

{$R *.dfm}
begin
OnCreate Form1; { bor: mit "OnCreate Form1" meinte ich das Ereignis (Event) onCreate von Form1. Erstelle mit den Objectinspector eine entsprechende Ereignisbehandlungsroutine (Registerkarte Ereignisse/Events - doppelklick auf OnCreate)}
QuizData := TIniFile.Create('quiz.dat'); { OK }
Antwort := QuizData.ReadString('[quiz]'); { macht hier noch keinen Sinn - die Antwort kannst Du erst auslesen wenn Du die Frage kennst - wirf auch noch mal einen Blick auf die Parameter: TIniFile.ReadString(Section, Key, StandardRueckgabeWert:String):String; die Rechteckigen Klammern darfst Du übrigens nicht mit angeben, da ist mir beim letzten Posting ein kleiner fehler unterlaufen. Sorry! }
QuestionList := TStringList.Create; { OK }

ReadSection('quiz');
ReadString('QuestionList');
{ bor: müsste so ausssehen: QuizData.ReadSection('quiz', QuestionList); Ohne QuizData. am vor der Methodes weiß der Compilert nicht welches Object verwendet werden soll und würde hier Form1 vorraussetzten... }

QuestionList[Nummer]; { Ohne Nummer, bekommst Du auch keine Frage - Du musst erst mal eine Variable Nummer deklarieren (lokal) und dies anschließend mit einer Zahl füllen (später nimmst Du besser eine Zufallszahl, dafür müsstest Du dann allerings die Anzahl der Listeneinträge ermitteln, damit eine gültige Fragenummer erzeugt wird...). Damit Du auch was von der Anweisung hast solltest Du auch den Rückgabewert gleich der Labelbeschriftung zuweisen (Label1.Cpation := QuestionList[Nummer];) sonst ist die Anweisung recht sinnfrei. Am besten solltest Du diese Anweisung allerdings bei eine Andere Funktion bzw. Procedure verschieben, da sie jedesmal wenn eine Frage gestellt werden soll ausfgerufen werden muss (zur Einfachheit halber könntest Du einfach eine dritten Button "Frage Stellen" verwenden) }
end


procedure TForm1.Button1Click(Sender: TObject); { Was soll der Klick auf Button1 bewirken? }
begin
QuizData.Read('quiz')
end;


procedure TForm1.Button2Click(Sender: TObject); { ähnlich wie bei OnCreate - die Freigabeanweisungen solltest Du in der beim OnClose Ereignis von Form1 eibauen, denn jetzt werden sie nur ausgführt wenn das Programm durch Button2 beendet wird. }
begin
QuizData.free; { -> onClose }
QuestionList.free; { -> onClose }
Close; { OK - die Methode Close löst das Ereignis OnClose aus}
end;

end.


Ich hab mich erst mal auf die wichtigsten Punkte beschränkt, damit hast Du erst mal wieder was zu tun ;-)
Wenn Du damit fertigt bist melde Dich einfach nochmal...

Zum Delphi lernen empfehle ich Dir das Buch "Jetzt lerne ich Delphi" aus dem Markt & Technik Verlag empfehelen, damit kannst Du ohne Vorkenntnisse einsteigen und am Ende werden auch noch Themen wie Komponentenentwicklung angesprochen...


CU Borlander
bei Antwort benachrichtigen