Autor Beitrag
Lama
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 19.02.04 17:36 
Hi. Ich denke, hier bin ich am richtigen Ort, wenn ich Hilfe suche.

Also. mein Problem:

Ich arbeite seit gestern an einem kleinen Quiz-Programm. Vorerst ist es mein Ziel, Fragen aus einer Datenbank auszulesen, in Labels auszugeben und zu überprüfen, ob die richtige Radiobox markiert ist. Das funktioniert auch schon ganz gut. Mein Problem ist allerdings:

Ich hab die Überprüfung direkt in den OnClick des Antwortbuttons geschrieben und eine repeat-Schleife(für vorerst 5 Antworten) verwendet. Jetzt komm ich aber nicht mehr dahin, dass ich eine RadioBox markieren kann, sondern es wird automatisch die selbe Antwort(1-3)ausgewählt und wieder überprüft, bis das Ende erreicht ist. Und nun hab ich absolut keine Ahnung, wie ich das ändern kann. Ich kann auch gerne den Programm-Code posten, wenn mir jemand damit helfen könnte...

Etwas noch: Ich bin mir bewusst, dass dies wahrschienlich ien ziemlich dämlicher Fehler von mir war. Aber zu meiner Verteidigung: ich hab vor 2 Tagen mit dem Lernen angefangen und noch nie zuvor mit Delphi der etwas ähnlichem gearbeitet. Und DAFÜR ist es ja schon nicht schlecht...

Markus
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Do 19.02.04 17:45 
Ich würde dir folgendes empfehlen ...
Vergiß das OnClick-Event und mache einen Button mit der man erst die Eingabe abschließt.

Das hat nämlich einen einfachen Grund:
Ich (und viele andere) hassen es sehr, wenn auf einen RadioButton irgendwas passiert, weil man bei so einer Optionsauswahl immer annimmt, man kann hin- und herklicken ;-) .

Wenn du übrigends bei der nächsten Frage den Checked-Status zurücksetzen willst, brauchst du nur die Checked property aller TRadioButton auf false setzen. Voila.

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Lama Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 19.02.04 18:04 
MaxiTB hat folgendes geschrieben:
Ich würde dir folgendes empfehlen ...
Vergiß das OnClick-Event und mache einen Button mit der man erst die Eingabe abschließt.

Das hat nämlich einen einfachen Grund:
Ich (und viele andere) hassen es sehr, wenn auf einen RadioButton irgendwas passiert, weil man bei so einer Optionsauswahl immer annimmt, man kann hin- und herklicken ;-) .

Wenn du übrigends bei der nächsten Frage den Checked-Status zurücksetzen willst, brauchst du nur die Checked property aller TRadioButton auf false setzen. Voila.


Hey, danke für die schnelle Antwort.
Und: entschuldigung, ich hab mich ein wenig falsch ausgedrückt(hab die ganze Nacht nicht geschlafen, musste lernen, wie man eine Datenbank erstellt und ausliest *gg*).
Also, ich hab ja einen Button zum Bestätigen. Problem ist nur, dass ich die Repeat-Schleife in DESSEN OnClickEvent gewschrieben hab. Und nun betätigt er sich automatisch. Das macht mir ganz schön zu schaffen...
Ich versuch grad, es ein wenig umzuschreiben, aber wenn man mir noch ein paar gute Tips geben könnte...*ganz lieb schau*

Markus
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Do 19.02.04 18:07 
Ups - sorry - hab ich in der Eile falsch gelesen :-/ .

Ähm, ja, da wäre jetzt ein bisserl Source-Code hilfreich ... weil eigentlich wird ein OnClick nur bei einem Klick ausgelöst ...

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Lama Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 19.02.04 18:16 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
begin 
runde:=1; ---------bestimmt die Zahl der Runden 

repeat 

label2.Caption:=InttoStr(runde); ------zeigt sie mir klein an 

begin 
Table1.Open; 
antwort1.enabled:=true; 
antwort2.enabled:=true; 
antwort3.enabled:=true; 
end; 

if antwort1.checked then a:=1 -----3 Antworten: gewählte wird in a gespeichert 
else if antwort2.checked then a:=2 
else if antwort3.checked then a:=3; 

if 
(table1.FieldByName('Richtig').AsString) = inttostr(a) then 
begin 
ShowMessage('Richtig'); 
runde:=runde+1; 
antwort1.enabled:=false; 
antwort2.enabled:=false; 
antwort3.enabled:=false; 
table1.Next; 
antwort1.checked:=false; 
antwort2.checked:=false; 
antwort3.checked:=false; 
Label1.Caption:=table1.FieldByName('Frage').AsString; 
antwort1.Caption:=table1.FieldByName('Antwort 1').AsString; 
antwort2.Caption:=table1.FieldByName('Antwort 2').AsString; 
antwort3.Caption:=table1.FieldByName('Antwort 3').AsString; 
end 
else 

DAS GLEICHE WIE OBEN NOCH MAL; NUR MIT ANDERER MESSAGE 

until runde=5; 
Table1.close; 

end;


OK, ich weiß, wahrscheinlich arbeite ich voll am Problem vorbei, aberwie gesagt: ich bin ein absoluter Neuling. Ich weiß auch, wo der Fehler liegt, hab aber keine Ahning wie ich ihn korregieren kann...

Markus

Moderiert von user profile iconPeter Lustig: Quote- durch Delphi-Tags ersetzt
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Do 19.02.04 18:29 
Das funktioniert so nicht *g* Du hast ein strukurelles Abfolgeproblem.

:arrow: Du solltest in deinem Form einen private member haben, den nennst du z.B. mRound: integer.

:arrow: Dann brauchst du eine private procedure, welche die Labels richtig lädt, je nach Runde, nenn sie procedure UpdateLabels().

:arrow: Dann machst du am besten eine private function, welche überprüft ob die richtige Antwort, je nach Runde, gewählt wurde, nenn sie am besten function CheckRadio(): boolean;

Jetzt baust du dein Button-Event folgendermaßen um:

:arrow: Erstens überprüfst per CheckRadio ob die Antwort richtig war.

:arrow: Zweitens erhöst du die Runde um eins mittels inc(mRound).

:arrow: Drittens überprüfst du, ob alle Runden abgeschlossen wurden.

:arrow: Viertens rufst du nun UpdateLabels auf.

Das wars - so würde ichs mal angehen. Ist nicht hundert prozentig Uni-vorzeigereif aber sicher brauchbar und wird funktionieren ;-) .

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Lama Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 19.02.04 18:38 
Danke. Uni-reif brauchts ja auch nicht zu sein. Is ja mein erstes PRogramm. Und wessen Erst-kreation ist schon perfekt? Naja, werds mal versuchen. Hoffe ich krieg das so hin...

Markus
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Do 19.02.04 18:47 
Meine Erstkreation war perfekt: Sah damals so aus
ausblenden Delphi-Quelltext
1:
10 PRINT "HELLO WORLD"					

und wurde von meinem C64 anstandslos perfekt ausgeführt.
Hach, das waren noch Zeiten - aber ich hab auch bescheidener angefangen ;-) .

Und wenns Probs gibt, einfach wieder in den thread hier posten ...

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Lama Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 19.02.04 21:28 
MaxiTB hat folgendes geschrieben:
Meine Erstkreation war perfekt: Sah damals so aus
ausblenden Delphi-Quelltext
1:
10 PRINT "HELLO WORLD"					

und wurde von meinem C64 anstandslos perfekt ausgeführt.
Hach, das waren noch Zeiten - aber ich hab auch bescheidener angefangen ;-) .

Und wenns Probs gibt, einfach wieder in den thread hier posten ...


Na gut, so hab ich auch angefangen. Aber ich meinte auch, mein erstes EIGENES Programm. Und ich bin unheimlich stolz darauf, was ich in zwei Tagen alles gelernt hab. Wnn man bedenkt, dass mir das mein Informatiklehrer in 2 Jahren nicht beibringen konnte... :D

Markus
Lama Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 20.02.04 00:08 
OK, das wars. Ich bin völlig überfordert. Vielleicht liegts nur daran, dass ich die ganze letzte Nacht durchgearbeitet hab und nur am Nachmittag geschlafen, aber irgendwie blick ich überhaupt nicht mehr durch.
Ich schätze mal, es gibt keinen Weg, mir das ein wenig einfacher zu erklären, oder? :(

Markus
Lama Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 20.02.04 01:58 
Ich bin die ganze Sache jetzt mal von einer ganz anderen Seite angegangen. Vielleicht sieht der Code nicht so elegant aus, wie er könnte, aber ES FUNKTIONIERT! Noch nicht perfekt, schon klar, aber ich wollte einfach mal meine Freude kundtun.

Also, mein Lösungsansatz:

2 Buttons: 'Start' und 'Antworten'

Start lädt die Fragen(einstweilen noch keine zufälligen, aber was nicht ist kann ja noch werden), aus der Datenbank und deaktiviert sich danach selbst. Gleichzeitig aktiviert er den von Vornhinein deaktivierten Antworten-Button.

Dieser wertet die Antwort aus und gibt eine Message. Dann deaktiviert er sich wieder und reaktiviert den Start-Button mit neuer Caption(Zu Runde X). Es wird eine Zeile in der Datenbank nach unten gewandert.

Nachteil:
Der User muss selbst drücken.
Vorteil:
Ein Source-Code den sogar ich verstehe. Und das soll was heißen. :)

Danke nochmals für all eure Hilfe. Vielleicht werde ich sie nochmals in Anspruch nehmen(ziemlich sicher sogar. Eine Random-Funktion hatte ich eigentlich schon geplant *gg*). Jetzt steht mir noch eine Menge Arbeit bevor(Punkte zählen, nach X Fragen beenden...), aber sie macht mir wieder Spaß!

Bis dann,
Markus
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Fr 20.02.04 02:08 
Ist doch keine schlechte Lösung ;-) . Viel Spaß noch beim weiterbasteln daran !

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Lama Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 20.02.04 02:36 
MaxiTB hat folgendes geschrieben:
Ist doch keine schlechte Lösung ;-) . Viel Spaß noch beim weiterbasteln daran !


Danke. Werd ich sicher haben. Ich werds euch alle wissen lassen, wenns fertig ist.

Markus

edit: tja, da nimmt man sich so viel vor, und dann klappts immer noch nciht so, wie man will...gut, das es Leute gibt, die sich auskennen.
2 Fragen:

1)Hat sich erledigt. Und hat nur 2 Stunden gedauert...

2)Gibt es eine Möglichkeit beim Befehl ShowMessage die Überschrift des aufklappenden Fensters zu ändern? Das nervt mich nämlich ganz gewaltig...

Danke.

Markus