AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String und Extended, Econvert Error

Ein Thema von Delphi-Narr · begonnen am 5. Sep 2009 · letzter Beitrag vom 5. Sep 2009
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz