Autor Beitrag
STFan
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 25.10.09 23:12 
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:

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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  rechner: Trechner;

implementation

{$R *.DFM}

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:
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
     0begin
        ergebnis := erstezahl + zweitezahl;
        ausgabe.caption := floattostr(ergebnis);
        end;
     1begin
        ergebnis := erstezahl - zweitezahl;
        ausgabe.caption := floattostr(ergebnis);
        end;
     2begin
        ergebnis := erstezahl * zweitezahl;
        ausgabe.caption := floattostr(ergebnis);
        end;
     3begin
        ergebnis := erstezahl / zweitezahl;
        ausgabe.caption := floattostr(ergebnis);
        end;
     4begin
        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 user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am So 25.10.2009 um 23:00
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 26.10.09 00:05 
Moin und :welcome: im Forum!


user profile iconSTFan hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe die case-Abfrage auf eine RadioGroup angewendet.
Wenn ich mir das hier so ansehe:
user profile iconSTFan hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
STFan Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 26.10.09 09:20 
Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 238
Erhaltene Danke: 4

Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mo 26.10.09 09:34 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
... aber statt die Eigenschaft .Items mit Werten zu belegen, ...

_________________
Na denn, dann. Bis dann, denn.
STFan Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 26.10.09 09:50 
user profile iconHobby-Programmierer hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 26.10.09 12:14 
ausblenden Delphi-Quelltext
1:
rechenarten.itemindex := 0;					

_________________
We are, we were and will not be.
STFan Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 26.10.09 14:57 
Danke :)

Jetzt tut alles so wie es soll :)

MfG