Einzelnen Beitrag anzeigen

Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

String und Extended, Econvert Error

  Alt 5. Sep 2009, 09:47
Hallo,
ich soll für die Schule einen Taschenrechner mit Delphi 5 erstellen.
Ich hab ihn jetzt so angeordnet, dass es die Buttons gibt:

Name: Caption:
Button1 1
Button2 2
...
Button0 0
Plus +
...
Gleich =
Komma ,
CE CE

___________
Darüber ist ein Editfeld: Rechenfeld.text
Es ist für ReadOnly eingestellt, sodass man die Zahlen über die Software "Tastatur" eingeben muss.

Variablen:

rRechnen1,
rRechnen2 : string;
RZeichen : real;

Beim Start werden rRechnen1 und rRechnen2 auf := ('') gesetzt.


procedure TForm1.Button1Click(Sender: TObject);
begin
rRechnen1:=rRechnen1 + '1';
Rechenfeld.Text:=rRechnen1;
end;

Das geht dann bis 9 bzw. 0 so weiter und auch das Komma funktioniert:

procedure TForm1.KommaClick(Sender: TObject);
begin
rRechnen1:=rRechnen1 + ',';
Rechenfeld.Text:=rRechnen1;
end;


So bekomme ich dann eine schöne Zeichenkette, also einen String.
Jetzt möchte ich, dass beim Klicken auf "+" erst überprüft wird, ob die Variable rZeichen auf 1/2/3 oder 4 ist (Sie wird beim Start auf 0 gesetzt)
Eins heißt + Rechnen
Zwei heißt - Rechnen usw.


procedure TForm1.PlusClick(Sender: TObject);
begin
if rZeichen = 1 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1)) +round(StrToFloat(rRechnen2)));
________
Einschub: So sollen die Zeichenketten umgerechnet werden und verarbeitet werden.
________

if rZeichen = 2 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))-round(StrToFloat(rRechnen2)));
if rZeichen = 3 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1)) *round(StrToFloat(rRechnen2)));
if rZeichen = 4 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))/round(StrToFloat(rRechnen2)));
rRechnen2:=rRechnen1;
rRechnen1:=('');
________
Einschub: Für die nächste Eingabe wird die RechenZahl wieder auf ('') gesetzt.
________
rZeichen:=1;
________
Einschub: Da die Zahl jetzt auf 1 gesetzt wird, wird beim Klick auf die nächste Rechenschaltfläche rRechnen1+rRechnen2 gerechnet.
________
Rechenfeld.Text:=rRechnen1;
Zwischenergebnis.Caption:=rRechnen2;
end;


So ist das auch mit - , * und /

Wenn ich jetzt also starte, dann kommt der Rechner und ich kann durchs Klicken eine Zahl eingeben, bsp. 123
Dann klicke ich auf "+"
Dann kommt die Meldung: Im Projekt Taschenrechner ist eine Exception der Klasse EConvertError aufgetreten.Meldung: ''' ist kein gültiger Gleitkommawert'. Prozess wurde angehalten.

Wenn ich dann auf OK klicke, wird die letzte Zeile vom PlusButton Blau:

Zwischenergebnis.Caption:=rRechnen2;

Ich weiß nicht, was ich hier falsch mache...

Zum Schluss noch mein gesamter Quelltext:


Delphi-Quellcode:
unit Rechner;

interface

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

type
  TForm1 = class(TForm)
    Rechenfeld: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Gleich: TButton;
    Button0: TButton;
    Komma: TButton;
    Plus: TButton;
    Minus: TButton;
    Mal: TButton;
    Geteilt: TButton;
    Button10: TButton;
    Zwischenergebnis: TLabel;
    Label1: TLabel;
    procedure Button10Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button0Click(Sender: TObject);
    procedure KommaClick(Sender: TObject);
    procedure PlusClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RechenfeldChange(Sender: TObject);
    procedure MinusClick(Sender: TObject);
    procedure MalClick(Sender: TObject);
    procedure GeteiltClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  rRechnen1 : String;
  rRechnen2 : String;
  rZeichen : real;

implementation

{$R *.DFM}

procedure TForm1.Button10Click(Sender: TObject);
begin
     rRechnen1:= ('');
     rRechnen2:= ('');
     Zwischenergebnis.Caption:=('0');
     Rechenfeld.text:=RrECHNEN1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     rRechnen1:=rRechnen1 + '1';
     Rechenfeld.Text:=rRechnen1;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     rRechnen1:=rRechnen1 + '2';
     Rechenfeld.Text:=rRechnen1;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
     rRechnen1:=rRechnen1 + '3';
     Rechenfeld.Text:=rRechnen1;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
     rRechnen1:=rRechnen1 + '4';
     Rechenfeld.Text:=rRechnen1;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
     rRechnen1:=rRechnen1 + '5';
     Rechenfeld.Text:=rRechnen1;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
     rRechnen1:=rRechnen1 + '6';
     Rechenfeld.Text:=rRechnen1;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
     rRechnen1:=rRechnen1 + '7';
     Rechenfeld.Text:=rRechnen1;
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
     rRechnen1:=rRechnen1 + '8';
     Rechenfeld.Text:=rRechnen1;
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
     rRechnen1:=rRechnen1 + '9';
     Rechenfeld.Text:=rRechnen1;
end;

procedure TForm1.Button0Click(Sender: TObject);
begin
     rRechnen1:=rRechnen1 + '0';
     Rechenfeld.Text:=rRechnen1;
end;

procedure TForm1.KommaClick(Sender: TObject);
begin
     rRechnen1:=rRechnen1 + ',';
     Rechenfeld.Text:=rRechnen1;
end;

procedure TForm1.PlusClick(Sender: TObject);
begin
     if rZeichen = 1 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))+round(StrToFloat(rRechnen2)));
     if rZeichen = 2 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))-round(StrToFloat(rRechnen2)));
     if rZeichen = 3 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))*round(StrToFloat(rRechnen2)));
     if rZeichen = 4 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))/round(StrToFloat(rRechnen2)));
     rRechnen2:=rRechnen1;
     rRechnen1:=('');
     rZeichen:=1;
     Rechenfeld.Text:=rRechnen1;
     Zwischenergebnis.Caption:=(rRechnen2);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
     rZeichen:=1;
     rRechnen2:=('2');
end;

procedure TForm1.RechenfeldChange(Sender: TObject);
begin
     try
        rRechnen1:=FloatToStr(round(StrToFloat(Rechenfeld.text)));
     except
         ;
     end;
end;

procedure TForm1.MinusClick(Sender: TObject);
begin
if rZeichen = 1 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))+round(StrToFloat(rRechnen2)));
     if rZeichen = 2 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))-round(StrToFloat(rRechnen2)));
     if rZeichen = 3 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))*round(StrToFloat(rRechnen2)));
     if rZeichen = 4 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))/round(StrToFloat(rRechnen2)));
     rRechnen2:=rRechnen1;
     rRechnen1:=('');
     rZeichen:=2;
     Rechenfeld.Text:=rRechnen1;
     Zwischenergebnis.Caption:=(rRechnen2);
end;

procedure TForm1.MalClick(Sender: TObject);
begin
if rZeichen = 1 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))+round(StrToFloat(rRechnen2)));
     if rZeichen = 2 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))-round(StrToFloat(rRechnen2)));
     if rZeichen = 3 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))*round(StrToFloat(rRechnen2)));
     if rZeichen = 4 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))/round(StrToFloat(rRechnen2)));
     rRechnen2:=rRechnen1;
     rRechnen1:=('');
     rZeichen:=3;
     Rechenfeld.Text:=rRechnen1;
     Zwischenergebnis.Caption:=(rRechnen2);
end;

procedure TForm1.GeteiltClick(Sender: TObject);
begin
     if rZeichen = 1 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))+round(StrToFloat(rRechnen2)));
     if rZeichen = 2 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))-round(StrToFloat(rRechnen2)));
     if rZeichen = 3 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))*round(StrToFloat(rRechnen2)));
     if rZeichen = 4 then rRechnen2:=FloatToStr(round(StrToFloat(rRechnen1))/round(StrToFloat(rRechnen2)));
     rRechnen2:=rRechnen1;
     rRechnen1:=('');
     rZeichen:=4;
     Rechenfeld.Text:=rRechnen1;
     Zwischenergebnis.Caption:=(rRechnen2);
end;

end.
  Mit Zitat antworten Zitat