Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit case: es geschieht nichts
STFan - So 25.10.09 23:12
Titel: Problem mit case: es geschieht nichts
Wir behandeln derzeit Delphi im Informatikunterricht. Jetzt
versuche ich, einen kleinen Rechner zusammenzubasteln... haben wir zwar [zumindest noch] nicht als Aufgabe; aber ohne Übung hat man alles bis zur nächsten Stunde vergessen - zudem macht Programmieren einfach Spaß^^. Aber ist ja auch egal...
Als ich es mit if-Abfragen versucht habe, hat es wunderbar geklappt. Jetzt wollte ich den Code etwas umbauen, da mir die ganze if-Verschachtelung dann doch etwas zu groß vorkam. Anstatt der if-Abfrage habe ich die case-Abfrage verwendet.
Ich habe die case-Abfrage auf eine RadioGroup angewendet.
Hier mal die relevanten Teile des Codes, zur besseren Übersich in zwei Teile unterteilt:
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type Trechner = class(TForm) rechenarten: TRadioGroup; plus: TRadioButton; minus: TRadioButton; mal: TRadioButton; geteilt: TRadioButton; hoch: TRadioButton; all: TCheckBox; zahl1: TEdit; zahl2: TEdit; tausch: TButton; meldung: TPanel; color: TPanel; ausgabe: TPanel; Label1: TLabel; ok: TButton; clear: TButton; procedure tauschClick(Sender: TObject); procedure clearClick(Sender: TObject); procedure okClick(Sender: TObject); private public end;
var rechner: Trechner;
implementation
{$R *.DFM} |
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:
| procedure Trechner.okClick(Sender: TObject); var erstezahl : extended; zweitezahl : extended; ergebnis : extended; begin erstezahl := strtofloat(zahl1.text); zweitezahl := strtofloat(zahl2.text); case rechenarten.itemindex of 0: begin ergebnis := erstezahl + zweitezahl; ausgabe.caption := floattostr(ergebnis); end; 1: begin ergebnis := erstezahl - zweitezahl; ausgabe.caption := floattostr(ergebnis); end; 2: begin ergebnis := erstezahl * zweitezahl; ausgabe.caption := floattostr(ergebnis); end; 3: begin ergebnis := erstezahl / zweitezahl; ausgabe.caption := floattostr(ergebnis); end; 4: begin while zweitezahl > 0 do begin ergebnis := erstezahl * erstezahl; end; ausgabe.caption := floattostr(ergebnis); end; end; end;
end. |
Mein Problem ist, dass ich machen kann was ich will... das, was in den cases steht wird einfach nicht ausgeführt. Habe das schon getestet, indem ich in die cases zum Ausschließen eines Fehlers bei der Wertzuweisung so Scherze wie 'showmessage' eingebaut habe.
Ich habe schon einiges versucht, zum Beispiel, '0 ... 4' durch 'plus ... hoch' zu ersetzen; jedoch kommt dann nur die Meldung "Konstantenausdruck erwartet".
Ach ja... ich verwende Delphi5, da wir das auch in der Schule verwenden, falls das wichtig ist.
Für einen Hinweis, wo mein (Denk-)Fehler liegt wäre ich sehr dankbar :)
MfG
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am So 25.10.2009 um 23:00
Narses - Mo 26.10.09 00:05
Moin und :welcome: im Forum!
STFan hat folgendes geschrieben : |
| Ich habe die case-Abfrage auf eine RadioGroup angewendet. |
Wenn ich mir das hier so ansehe:
STFan hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type Trechner = class(TForm) rechenarten: TRadioGroup; plus: TRadioButton; minus: TRadioButton; mal: TRadioButton; geteilt: TRadioButton; hoch: TRadioButton; case rechenarten.itemindex of | |
Ich vermute mal, dass du folgendes gemacht hast: Eine Radiogroup auf das Formular gelegt, aber statt die Eigenschaft .Items mit Werten zu belegen, Radiobuttons da reingepackt hast. ;) Dann kann das nicht klappen, weil die Radiogroup dann gar nicht korrekt funktioniert. :idea:
cu
Narses
STFan - Mo 26.10.09 09:20
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
OK. Danke :) Leuchtet mir irgendwie ein.
Kannst du mir auch noch schnell sagen, wie ich die mit Werten belege?
Ich habe mich vorher nur mal mit PHP beschäftigt; und da war das mit der Oberfläche etwas anders (HTML^^).
Hobby-Programmierer - Mo 26.10.09 09:33
Moin ...,
einfach bei deinem RadioGroup im ObjectInspector auf die Eigenschaft Items. Dort kannst du dann die Bezeichnungen eintragen und schwupps werden diese erstellt.
alzaimar - Mo 26.10.09 09:34
Narses hat folgendes geschrieben : |
| ... aber statt die Eigenschaft .Items mit Werten zu belegen, ... |
STFan - Mo 26.10.09 09:50
Hobby-Programmierer hat folgendes geschrieben : |
Moin ...,
einfach bei deinem RadioGroup im ObjectInspector auf die Eigenschaft Items. Dort kannst du dann die Bezeichnungen eintragen und schwupps werden diese erstellt. |
Achso :)
Und noch 'ne kleine Frage: Wie kann ich ein Item vorauswählen? Bei einem normalen Radiobutton musste ich ja einfach 'checked' den Wert 'true' zuweisen.
Und wie kann ich von anderen Prozeduren aus ein Item auswählen? Durch 'rechenarten.itemindex[0] = true;' ?
MfG
Gausi - Mo 26.10.09 12:14
Delphi-Quelltext
1:
| rechenarten.itemindex := 0; |
STFan - Mo 26.10.09 14:57
Danke :)
Jetzt tut alles so wie es soll :)
MfG
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!