Entwickler-Ecke

Sonstiges (Delphi) - Delphi-Neuling hat Frage zu einem Währungsrechner-Programm


dejavu - Di 04.05.10 18:47
Titel: Delphi-Neuling hat Frage zu einem Währungsrechner-Programm
Hallo, ich habe gerade in Delphi einen Währungsrechner gebaut der auch soweit funktioniert. Allerdings stört mich, dass ich 2 Buttons zum Umrechnen habe (einen für Euro in Dollar "BEuroDollar" und einen für Dollar in Euro "BDollarEuro").
Kann man das Programm nicht irgendwie so verfassen, dass ich nur einen Button brauche um die jeweiligen Werte umzurechnen? Also drücke den gleichen Button wenn ich Euro in Dollar umrechnen will und ungekehrt?
Mein Quelltext sieht momentan so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.BEuroDollarClick(Sender: TObject);
const rKurs = 0.767283;
var rDollar,rEuro :real;
begin
rEuro:= StrToFloat (EEuro.Text);
rDollar:= rEuro/rKurs;
EDollar.Text:= FloatToStr (rDollar);
end;

procedure TForm1.BDollarEuroClick(Sender: TObject);
const rKurs = 0.767283;
var rDollar,rEuro :real;
begin
rDollar:= StrToFloat (EDollar.Text);
rEuro:= rDollar*rKurs;
EEuro.Text:= FloatToStr (rEuro);

end;

end.
"BEuroDollar" = Button um Euro in Dollar zu rechnen
"BDollarEuro" = Button um Dollar in Euro zu rechnen
"rKurs" = Umrechnungskurs
"EEuro" = Edit-Feld wo man den Euro-Wert reinschreibt
"EDollar" = Edit- Feld wo man den Dollar-Wert reinschreibt

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Martok - Di 04.05.10 19:18

Die Frage ist doch: wie macht der User dem Programm begreiflich, welcher Wert jetzt der ist, den er umgerechnet haben will?

Klar, man könnte das über einen Button für beides und eine If-Unterscheidung machen. Aber: dann brauchst du eine Auswahlmöglichkeit für die Richtung.


Xion - Di 04.05.10 19:21

Ich würde sagen, er soll einfach immer das leere Feld ausfüllen (das geht per if). Alternativ könnte man das, was zuletzt verändert wurde, als ausgangswert nehmen (beim OnChange des Edits speichern welches verändert wurde).


dejavu - Di 04.05.10 19:33

Sorry, dachte das Programm wäre soweit verständlich. Ich versuche es mal etwas genauer zu beschreiben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.BEuroDollarClick(Sender: TObject);  // Klick auf den Button der Euro in Dollar umrechnet
const rKurs = 0.767283;     //rKurs ist der Umrechnungskurs den das Programm für die Rechnung verwendet
var rDollar,rEuro :real;    //rEuro ist der Wert in Euro, rDollar der Wert in Dollar
begin 
rEuro:= StrToFloat (EEuro.Text);     //Das Programm soll den Euro-Wert ins dazugehörige Edit-Feld schreiben ("EEuro")
rDollar:= rEuro/rKurs;               //Eigentliche Berechnung: Dollarwert = Eurowert / Kurs
EDollar.Text:= FloatToStr (rDollar); //Der Dollar-Wert ("rDollar")ins dazugehörige Edit-Feld ("EDollar") 
end;
Der zweite Button macht halt das gleiche nur umgekeht (Dollar in Euro).
So sieht die Bedienoberfläche aus: http://www.fotos-hochladen.net/view/whrungsrechnervpya5q92.jpg
Konntest du mein Programm jetzt nachvollziehen?
Danke für deine Hilfe!

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Sorry wollte an den User über dir schreiben. Könntest du mir vielleicht einmal als Quelltext verfassen, wie das mit so einer if beziehung dann aussieht? Danke im vorraus.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Habe die genaue Beschreibung unter die Antwort von Martok gepinnt ;)


ALF - Di 04.05.10 19:38

@Xion hat es Dir doch schon geschrieben!
Wenn Du in dem einem editfeld was einträgt wird das andere gelöscht, und ummgekehrt. Nun brauchst Du auch nur ein Button.

Gruss Alf


Martok - Di 04.05.10 19:44

Was dein Programm macht war schon klar ;)
Ist ja auch net sooo komplex :P

Die Frage war ja eben, was passieren soll, nicht was passiert... user profile iconXions Vorschlag ist da duchaus gut.


dejavu - Di 04.05.10 19:46

Bin nur leider n Neuling und würde gerne wissen wie das ganze in Delphi mit if / then / else aussieht. Könnte da jemand den Quelltext kurz schreiben?
Ich würde jetzt anfangen mit

Delphi-Quelltext
1:
2:
if procedure TForm1.Button1Click(Sender: TObject);
then... // ("..." = Anweisung)

aber das ist doch bestimmt falsch^^

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


ALF - Di 04.05.10 19:53

Wenn Du nur mit einem Button arbeiten willst geht im Prinzip so: in der ButtonProcedure

Delphi-Quelltext
1:
2:
3:
4:
5:
if (edit1.text=''and (edit2.text=''then exit; 
if edit1.text='' then
  rechne dollar zu euro;
if edit2.text='' then
  rechne euro zu dollar


mal auf die schnelle. :wink:

Gruss Alf


dejavu - Di 04.05.10 19:56

Hammer cool Alf, dass ist gerade wie Weinachten, Geburtstag, Ostern, Silvester .... gleichzeitig für mich! Vielen Dank!


elundril - Di 04.05.10 20:16

Für solche Fälle empfehle ich das Delphi-Wikibook [http://de.wikibooks.org/wiki/Programmierkurs:_Delphi] und Christian's Crashkurs [http://www.christian-stelzmann.de/index_tutorials_crashkurs.html]. Da lernt man wie If-Abfragen, Schleifen usw aufgebaut sind. Alle kleinen Grundlagen also. ;)

lg elundril


dejavu - Di 04.05.10 20:36

Öhm was ist denn jetzt falsch an meinem Quelltext? Das Programm will nicht mehr funzen.. :(

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:
procedure TForm1.BAusfuehrenClick(Sender: TObject);   // Klick auf den Button "BAusfuehren"
const rKurs = 0.767283;                               // Umrechnungskurs
var rDollar,rEuro :real;                              // Variablen: "rDollar" = Dollarwert, "rEuro" = Eurowert

begin                                                 // Programmstart
if (EEuro.text=''and (EDollar.text=''then exit;   // Wenn das Feld EEuro und EDollar leer ist, Programm beenden
if EDollar.text='' then                               // Wenn das Feld EDollar leer ist:
begin                                                 // Starte 1. If-Anweisung
rEuro:= StrToFloat (EEuro.Text);                      // Anfang Umrechnung Euro zu Dollar
rDollar:= rEuro/rKurs;                                // Dollarwert = Eurowert / Umrechnungskurs
EDollar.Text:= FloatToStr (rDollar);                  // Ende Umrechnung Euro zu Dollar
end;                                                  // Beende 1. If- Anweisung

if EDollar.text='' then                               // Wenn das Feld EDollar leer ist:
begin                                                 // Starte 2. If-Anweisung
rDollar:= StrToFloat (EDollar.Text);                  // Anfang Umrechnung Dollar zu Euro
rEuro:= rDollar*rKurs;                                // Eurowert = Dollarwert * Umrechnungskurs
EEuro.Text:= FloatToStr (rEuro);                      // Ende Umrechnung Dollar zu Euro

end;                                                  // Beende 2. if- Anweisung

end;                                                  // Beende Button procedure

end.                                                  // Beende Programm

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


elundril - Di 04.05.10 20:44

was sagt Delphi denn als Fehlermeldung. Fehlermeldungen bitte immer angeben, das erleichtert die suche.

lg elundril


ALF - Di 04.05.10 20:45

was soll den das:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if EDollar.text='' then
begin                                                 
.....
end;

if EDollar.text='' then //<- müsste nicht hier EEuro.Text stehen
begin                                                 
.....
end;


Gruss Alf


dejavu - Di 04.05.10 20:47

Leider keine Fehlermeldung, er Rechnet nur von Euro in Dollar, aber nicht umgekehrt.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Ich überprüfs mal.


Xion - Di 04.05.10 20:50

jo, siehe Antwort von user profile iconALF.

//Edit: zu spät -.-


dejavu - Di 04.05.10 20:52

Ja, der Alf hat mal wieder recht, jetzt geht alles =)
Danke!

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Nun habe ich noch einen letzten Wunsch:
Ich möchte einen zusätlichen Button haben ("BReset"), der die Werte die in "EEuro" und "EDollar" stehen zurücksetzt. Also so, dass wieder gar nichts drinne steht, sodass man die Werte nicht immer manuell löschen muss wenn man eine neue Zahl umrechnen möchte. Geht das auch?

Edit: (Jaa ich habe die Edit-Funktion kennengelernt ;))
Habe es am anfang so versucht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.BResetClick(Sender: TObject);
begin
EEuro.Text:= ("")
EDollar.Text:= ("")
end;
end.

Aber das mochte der liebe Borland nicht haben.
Illegal character input file: "" ($22)

Edit:
Aaah Fehlerquelle gefunden.. 1. falsche Zeichen habe "" statt '' verwendet und am Ende kein Semikolon geschrieben :)
Danke für eure Hilfe.
Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


elundril - Di 04.05.10 21:30

klar. mit edit.text bekommst du den text, mit := weißt du einer variablen etwas zu und '' ist der leerstring. jetzt darfst du mal puzzlen und schauen ob du es zusammenkriegst- ;)

lg elundril