Autor Beitrag
Gurke
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 10.06.07 02:03 
Hallo,
ich bin anfänger und wollte wohl einen taschenrechner machen.
aber einen der nur 1 editfeld hat.. so wie die taschenrechner unter windows funktioniert.
wie man mit mehreren editfeldern einen erstellt weiß ich wohl.

mein problem ist nun ich weiß nicht wie ich das hinbekomme, dass wenn ich eine zahl eingebe , dann zb auf + drücke die eingebene zahl in einer variable gespeichert wird sodass ich damit später weiterrechnen kann.

die zahl brauchen wir ja für nachher um damit weiterzurechnen.. denn danach muss man ja ins selbe editfeld die 2te zahl eingeben und die beiden sollen dann durchs klicken auf das = sich addieren

und dann soll wenn man aufs = klickt die lösung in dem editfeld angezeigt werden und zugleich muss der ja wissen das wenn ich aufs = klicke das er nicht minus rechnen soll sonder +

....das alles ist etwas zu schwer für mich.. könntet ihr mir helfen?


danke
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: So 10.06.07 06:57 
Hi und erst mal Willkomen
Nun, du schreibst, du weißt, wie man mit mehreren Editfeldern einen Rechner baut ?? und Probleme dabei bekommst, wenn es nur mit einem Editfeld sein soll. O k, dann geh ich mal davon aus, du weißt, was eine Variable ist und du kennst die verschidenen Typen, String, Real, Integer, Boolean etc.
Zuerst deklarierst du eine Variable
Speicher : Real; // weil ja nicht immer ganze Zahlen vorkommen....

Nun schreibst du in der Form Create einen wert 0 in die Speichervariable und in der nächsten Zeile schreibst du diesen Wert in dein Editfeld.
ausblenden Delphi-Quelltext
1:
2:
Speicher := 0;
  Edit1.Text:=FloatToStr(Speicher); // Edit ist Textfeld, daher umwandeln in String !

in die OnShow der Form schreibst du
ausblenden Delphi-Quelltext
1:
Edit1.Setfocus;// gibt in der Form Create Mecker...					

Das bewirkt, das du sofort Zahlen eingeben kannst und der alte Wert automatisch gelöscht wird.

Nun zu den Rechenarten, die du vermutlich durch Buttons realisierst.
Also, ButtonPlus, ButtonMinus etc....
Also nix wie rein in die Ereignisroutinen und entsprechend der Rechenart für plus z.B.
ausblenden Delphi-Quelltext
1:
2:
3:
  Speicher :=Speicher +StrToFloat(Edit1.Text); // natürlich muß ein String vor der Berechnung wieder in eine Zahl gewandelt werden..
  Edit1.Text:=FloatToStr(Speicher); // Und den Wert aus Speicher wieder in das Editfeld
  Edit1.Setfocus;// und gleich wieder ein SetFocus für die nächste Eingabe..

Das sollte reichen.
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 10.06.07 08:16 
Der Typ Real ist deprecated. Bitte Extended benutzen.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 10.06.07 10:57 
Wo steht, dass Real deprecated ist? Und wieso sollte man stattdessen so einen Monster-Typen wie Extended benutzen, wenn man einen solchen Darstellungsbereich gar nicht braucht?

//edit: Verwechselst Du das vielleicht mit Real48?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: So 10.06.07 11:16 
Soweit ich weiß steht das in der Delphi-Hilfe. Man solle alle Real-Typen vermeiden, und lieber auf Single, Double oder Extended zurückgreifen. Im Forum hab ich auch mal gelesen, dass die neueren Delphi-Versionen automatisch statt Real Double nehmen oder so. Auf jeden Fall benutz ich Real nie.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 10.06.07 11:20 
Real ist ein generischer Typ, der momentan mit Double identisch ist. Und dass man den nicht verwenden soll, steht nicht in der Hilfe. Stattdessen steht bei Extended, dass man den mit Vorsicht genießen sollte, wenn man plattformübergreifend arbeiten will.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Gurke Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 10.06.07 11:38 
Hi, irgendwie bekomm ich das nicht so ganz hin =)
der speicher sich jetzt wohl die zahl.. das nur dauerthaft =)

un das = zeichen brauche ich irgendwie nicht

ich hab den mal hochgeladen damit ihr seht wie der aussehen soll und funktionieren soll.

www.kram-hochladen.d...load.php?id=ODA0Njk=


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:
42:
43:
44:
45:
46:
var Form1: TForm1; Speicher : Real;

implementation

{$R *.dfm}

//hier sind die proceduren für die butoons ..habe ich mal wegen der länge gelöscht

procedure TForm1.FormCreate(Sender: TObject);

begin
Speicher := 0;
  Edit1.Text:=FloatToStr(Speicher);

end;

procedure TForm1.Button18Click(Sender: TObject);
begin
Speicher :=Speicher +StrToFloat(Edit1.Text); // natürlich muß ein String vor der Berechnung wieder in eine Zahl gewandelt werden..
  Edit1.Text:=FloatToStr(Speicher); // Und den Wert aus Speicher wieder in das Editfeld
  Edit1.Setfocus;// und gleich wieder ein SetFocus für die nächste Eingabe..

end;

procedure TForm1.Button17Click(Sender: TObject);
begin
Speicher :=Speicher -StrToFloat(Edit1.Text); // natürlich muß ein String vor der Berechnung wieder in eine Zahl gewandelt werden..
  Edit1.Text:=FloatToStr(Speicher); // Und den Wert aus Speicher wieder in das Editfeld
  Edit1.Setfocus;// und gleich wieder ein SetFocus für die nächste Eingabe..
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
Speicher :=Speicher *StrToFloat(Edit1.Text); // natürlich muß ein String vor der Berechnung wieder in eine Zahl gewandelt werden..
  Edit1.Text:=FloatToStr(Speicher); // Und den Wert aus Speicher wieder in das Editfeld
  Edit1.Setfocus;// und gleich wieder ein SetFocus für die nächste Eingabe..
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
Speicher :=Speicher /StrToFloat(Edit1.Text); // natürlich muß ein String vor der Berechnung wieder in eine Zahl gewandelt werden..
  Edit1.Text:=FloatToStr(Speicher); // Und den Wert aus Speicher wieder in das Editfeld
  Edit1.Setfocus;// und gleich wieder ein SetFocus für die nächste Eingabe..
end;

end.


Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 10.06.07 12:02 
In einigen älteren Delphi-Versionen kann es passieren, dass Real zu Real48 konvertiert wird. Deshalb Double verwenden, dann ist man auf der sicheren Seite. Extended hat bisher noch nie Probleme verursacht (zumindest auf Linux + Wine).

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Gurke Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 10.06.07 12:11 
aber das mit double oder real würde ja nichts daran ändern das der taschenrechner nicht richtig funktioniert.

denn dem = ziechen button fehlt ja die procedure,was der machen soll, das ist ja jetzt einfach nur ein button der nix macht
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 10.06.07 12:15 
nur mal so, die Suche nach "Suche in der Entwickler-Ecke TASCHENRECHNER" liefert 334 Ergebnisse :wink:

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 10.06.07 12:17 
user profile iconGTA-Place hat folgendes geschrieben:
In einigen älteren Delphi-Versionen kann es passieren, dass Real zu Real48 konvertiert wird. Deshalb Double verwenden, dann ist man auf der sicheren Seite.
Nein, genau andersrum :roll:
Delphi-Hilfe:
Der Typ Real48 (6 Byte) hatte in früheren Object Pascal-Versionen den Namen Real. Wenn Sie Quelltext neu compilieren, der den alten Typ Real (6 Byte) in Delphi enthält, ändern Sie diesen Typ in Real48. Die Compiler-Direktive {$REALCOMPATIBILITY ON} wandelt den Typ Real wieder in den alten 6-Byte-Typ um.


user profile iconGTA-Place hat folgendes geschrieben:
Extended hat bisher noch nie Probleme verursacht (zumindest auf Linux + Wine).
Ist nur Quatsch, soviel Speicher zu beanspruchen, wenn man ihn nicht braucht. Double reicht selbst für die meisten wissenschaftlichen Anwendungen völlig aus.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: So 10.06.07 12:18 
Hi
Gut, deine Anwendung bekomme ich nicht hochgeladen, ist aber auch egal. So wie ich's gesehen habe, hast du verstanden, wie ich's gemeint hab. Nun, das Gleichheitszeichen würd ich einfach nur dazu benutzen, um den Focus von dem Editfeld zubekommen, bzw. die letzte Rechenoperation ohne SetFocus.
Dann allerdings brauchst du ein "C" Taste, um das Editfeld und die Variable "Speicher" zurückzusetzen und den Focus wieder zu setzen. Ach ja, woher weiß dein "=" Zeichen, welche Rechenoperation die letzte war ?
Ich würd dafür mal einfach eine Integer nehmen und entsprechend der letzten Operation einen Wert zuweisen.
Beim Betätigen der "=" Taste
könnt dann folgender Programmcode stehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
.....
Case RechenOP of 1: Speicher:=Speicher+StrToFloat(Edit1.Text); 
                 2: Speicher:=Speicher-StrToFloat(Edit1.Text); 
                 3: ......  // usw
          end;
          edit1.Text:=FloatToStr(Speicher);
end;

Noch eine Bemerkung: Man braucht nicht Real zu nehmen, aber mir ist letztendlich noch egal, ob mein Real ein Single oder Double ist, solange ich nicht die Marslandung berechnen soll......
Nix gegen solche Hinweise, sie sind sicherlich nützlich, doch einem Anfänger, der seine ersten Schritte in der Programmierung tut, hilft die Diskussion nicht allzuviel ob oder ob nicht oder vielleicht doch. Wichtig ist, das er darauf achtet, das sein Rechner nicht grad mit Integer Erfolge bringt.....
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
Gurke Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 10.06.07 12:46 
o man das ist etwas kompliziert hier alles O.o
warum man kein integer nehmen kann und warum real oder double besser/schlechter sein soll weiß ich wohl im groben.. zumindst mit integer weil der ja kein nur die normalen zahlen kann...aber das war auch nicht meine frage..

hab gerade gesehen das man das hier auch im forum hochladen kann.
hab ich mal gemacht.. kann sich das bitte einer mal angucken? ich komm echt net weiter =)
Einloggen, um Attachments anzusehen!
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: So 10.06.07 12:58 
Hi
Ich hab nicht verstanden, was da kompliziert ist...
Ist doch alles erklärt, aber gern nochmal der Hinweis auf die Integervariable RechenOp
RechenOP : Integer;// so wird diese Deklariert

und dann inn den Rechenoperationen auf einen Wert gesetzt, für jede Rechenoperation einen anderen Wert, wobei ich nicht vorschreibe , welche Zahl für Plus steht.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button18Click(Sender: TObject);  
begin  
Speicher :=Speicher +StrToFloat(Edit1.Text); // natürlich muß ein String vor der Berechnung wieder in eine Zahl gewandelt werden..  
  Edit1.Text:=FloatToStr(Speicher); // Und den Wert aus Speicher wieder in das Editfeld  
  Edit1.Setfocus;// und gleich wieder ein SetFocus für die nächste Eingabe..  
  RechenOP:=1;// beliebig, aber eindeutigend;



ok. Mehr brauchts nicht. Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
Gurke Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 10.06.07 13:33 
naja.. zumindest bin ich dank eurer hilfe jetzt weiter als vorher.. aber.. rechnen tut der immernoch nicht richtig. =)

wenn ich zb 8+9=17 rechnen will
dann tip ich 8 dann das + dann die 9 {dann steht da 89} dann das = dann steht da 97

bei minus wenn ich zb 8+4=4 :
tip ich 8 dann das - dann steht da erst mal -8, dann die 4 {dann steht da -84} dann das = dann steht da 76

bei mal : 2*3=6 zb
tip ich 2 dann das * dann steht da erst mal 0, dann die 3 {dann steht da 03} dann das = dann steht da
0

bei geteil : 6*3=2 zb
tip ich 6 dann das / dann steht da erst mal 0, dann die 3 {dann steht da 03} dann das = dann steht da 0


also irgendwo rechnet der falsch.. oder der hat soeben die mathematik revolutioniert =)
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: So 10.06.07 15:26 
du kannst in dem moment, wo du den operator klickst noch gar nicht rechnen, da dir der 2.Operand fehlt...weiterhin musst du die ausgabe beim operator-click (oder bei der ersten ziffer) löschen (musst ja eine neue Zahl definieren).
ich würde evtl. erstmal alles in ein array oder ähnliches schreiben.
von der struktur her so etwa:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8
+
9
-
7
*
3


beim = gehst du das array durch und kannst z.b. auch erst die Punktrechnung ausführen und danach die Strichrechnung. oder du speicherst nur den letzten operator und rechnest mit diesem, wenn der nächste operator geklickt wird (haste aber ggf. Rechenfehler wegen der Prioritäten drin).
sicher gibts da tausend Möglichkeiten das zu realisieren....

HTH Frank
Gurke Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 10.06.07 16:49 
=) das hört sich alles so einfach an.. aber ich als anfäger hab keine ahnung wie ich das machen soll.
am leichtesten wäre es wenn einer meinen delphi code verfolständig damit ich da besser nachvollziehen kann..
ich hab tausen sachen ausprobiert aber der hat immer was fehlermeldung oder die falsche von vorhin oder einfach nur 0 geschr =)...leicht demprimierend

wo müsste ich denn die arrays einfügen und wie
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: So 10.06.07 18:12 
mal als kleiner anfang (ungetestet, soll ja nur die Vorgehensweise erläutern)...

hab der einfachtheit mal integer genommen, für floats müsste man ggf. 2 arrays nehmen - zahlen und operatoren getrennt):

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:
const 
  op_plus=1;
  op_minus=2;
  op_mal=3;
  op_geteilt=4;

var 
  calc_array: array of integer;

//das array immer erweitern wenn ein operator geklickt wird...davor nur die "ziffer zusammenbauen".

procedure TForm1.PlusClick(Sender:TObject);
begin
  //ggf hier schon prüfen ob die letzte operation eine Punktrechnung war und ggf. den Teil schon lösen

  //array erweitern (würde im Falle einer vorherigen Punktrechnung wegfallen)
  setLength(Calc_Array,Length(calc_array)+2); //+2 weil 1 Zahl+1 operator
  calc_array[High(calc_array)-1]:=StrToInt(Edit_Zahl.Text); //die neue Zahl hinzufügen
  calc_array[High(calc_array)]:=op_plus;  //den operator hinzufügen
end;

function TForm1.CalcResult:integer;
var i:integer;
begin
  i:=low(calc_array)+1; //position von 2. Array-element => erster operator
  result:=calc_array[i-1];  //erstes Array-Element als startwert nehmen
  while i+1<=High(calc_array) do
  begin
    case calc_array[i] of
      op_plus:result:=result+calc_array[i+1];
      op_minus:result:=result-calc_array[i+1];
      op_mal:result:=result*calc_array[i+1];
      op_geteilt:result:=result div calc_array[i+1];
    end;
    inc(i,2);
  end;
end;


HTH Frank
ich1506
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 49

Win XP, Win 98, Win 2000, Eisfair
Delphi 5 Enterp
BeitragVerfasst: So 10.06.07 21:08 
Warum soll es jetzt so schwierig für einen Anfänger werden?

Die sache mit dem Rechnen, wenn auf einen Operator geklickt wurde ist doch garnicht schlecht. Das Array macht alles nur komplizierter!

@gurke: poste doch bitte mal deinen aktuellen Stand...

Im Prinzip braucht man nur 2 Variablen:
1. Speicher: real;
2. Operator: integer; // 1=+, 2=-, 3=*, 4=/

so, und wenn auf eine Zahl gedrückt wird, oder eine Zahl eingegeben wird, wird sie in das Edit eingefügt.

Wenn aber ein Operator gedrückt wird, dann gibt es 2 Fälle:
1. man möchte 1+2 rechnen, hat die 1 eingetippt und drückt +:
man fügt die Zahl in den Speicher und speichert im Operator=1

oder 2.
man hat schon 1+2 eingegeben (die 2 steht im Feld) und drückt nun - um weiter zu rechnen:

also hat man die 1 im speicher, das - als 2 im operator also muss man am besten mit
case operator of (fast wie von olsmax geschrieben )
1: speichcher:=speicher+strtofloat(Edit1.Text)
...
end;

Wir haben im Hinterkopf, dass jetzt schon das - gedrückt wurde, also muss
operator:=2 gesetzt werden und das
Edit.Text:=''; (weil eine neue Zahl eingegeben werden soll)

So, diese 2. Variante kann man immer benutzen, wenn man zu Anfang (Programmstart)
speicher:=0;
operator=1;
dann addiert er bei der allerersten Operation zu 0 die Zahl, dass ist die Zahl :wink:

@gurke: prüf mal ob du wirklich speicher als real und nicht als String hast es sieht fast so aus... Zu beinem Beispiel: 8+9 ist als string 89 und wenn er dann rechnet (als Zahl) 89+8=97 da scheint was mit der Typumwandlung nicht zu stimmen...
Aber wie gesagt, wenn du moch keine Lösung hast, poste doch mal deinen Qelltext 8)

_________________
Mein Taschenrechner ist auch gerade fertig, aber 2 Zeilig und wissensschaftlich ;-)
Gurke Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 10.06.07 22:03 
mein stand ist immernoch das mit den rechenfehlern ..das mit den arrays habe ich versucht.. aber wohl soch etwas zu schwer/umständlich für mich weil ich zb gar net wusste wo ich die funktion einfügen musste.. und da kam immer irgendwie ein fehler..deswegen hab ich das wieder weggemacht

aber hier ist der stand wie ich den habe

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:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Edit1: TEdit;
    eins: TButton;
    zwei: TButton;
    drei: TButton;
    vier: TButton;
    fuenf: TButton;
    sechs: TButton;
    sieben: TButton;
    acht: TButton;
    neun: TButton;
    Null: TButton;
    positivnegativ: TButton;
    komma: TButton;
    Gleichzeichen: TButton;
    Clear: TButton;
    geteilt: TButton;
    mal: TButton;
    minus: TButton;
    plus: TButton;
    zurueck: TButton;
    procedure siebenClick(Sender: TObject);
    procedure achtClick(Sender: TObject);
    procedure neunClick(Sender: TObject);
    procedure vierClick(Sender: TObject);
    procedure fuenfClick(Sender: TObject);
    procedure sechsClick(Sender: TObject);
    procedure einsClick(Sender: TObject);
    procedure zweiClick(Sender: TObject);
    procedure dreiClick(Sender: TObject);
    procedure NullClick(Sender: TObject);
    procedure kommaClick(Sender: TObject);
    procedure positivnegativClick(Sender: TObject);
    procedure ClearClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure plusClick(Sender: TObject);
    procedure minusClick(Sender: TObject);
    procedure malClick(Sender: TObject);
    procedure geteiltClick(Sender: TObject);
    procedure GleichzeichenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1; Speicher : real;    RechenOP : Integer;

implementation

{$R *.dfm}

procedure TForm1.siebenClick(Sender: TObject);
begin
edit1.Text:=edit1.Text+('7');
end;

procedure TForm1.achtClick(Sender: TObject);
begin
edit1.Text:=edit1.Text+('8');
end;

procedure TForm1.neunClick(Sender: TObject);
begin
edit1.Text:=edit1.Text+('9');
end;

procedure TForm1.vierClick(Sender: TObject);
begin
edit1.Text:=edit1.Text+('4');
end;

procedure TForm1.fuenfClick(Sender: TObject);
begin
edit1.Text:=edit1.Text+('5');
end;

procedure TForm1.sechsClick(Sender: TObject);
begin
edit1.Text:=edit1.Text+('6');
end;

procedure TForm1.einsClick(Sender: TObject);
begin
edit1.Text:=edit1.Text+('1');
end;

procedure TForm1.zweiClick(Sender: TObject);
begin
edit1.Text:=edit1.Text+('2');
end;

procedure TForm1.dreiClick(Sender: TObject);
begin
edit1.Text:=edit1.Text+('3');
end;

procedure TForm1.NullClick(Sender: TObject);
begin
edit1.Text:=edit1.Text+('0');
end;

procedure TForm1.kommaClick(Sender: TObject);
begin
 edit1.Text:=edit1.Text+(',');
end;

procedure TForm1.positivnegativClick(Sender: TObject);
begin
 edit1.Text:=edit1.Text+('-');
end;


procedure TForm1.ClearClick(Sender: TObject);
begin
edit1.clear;
speicher:=0;
end;

procedure TForm1.FormCreate(Sender: TObject);

begin
Speicher := 0;
  Edit1.Text:=FloatToStr(Speicher);

end;

procedure TForm1.plusClick(Sender: TObject);
begin
Speicher :=Speicher +StrToFloat(Edit1.Text); // natürlich muß ein String vor der Berechnung wieder in eine Zahl gewandelt werden..
  Edit1.Text:=FloatToStr(Speicher); // Und den Wert aus Speicher wieder in das Editfeld
  Edit1.Setfocus;// und gleich wieder ein SetFocus für die nächste Eingabe..
  RechenOP:=1;// beliebig, aber eindeutigend;
end;

procedure TForm1.minusClick(Sender: TObject);
begin
Speicher :=Speicher -StrToFloat(Edit1.Text); // natürlich muß ein String vor der Berechnung wieder in eine Zahl gewandelt werden..
  Edit1.Text:=FloatToStr(Speicher); // Und den Wert aus Speicher wieder in das Editfeld
  Edit1.Setfocus;// und gleich wieder ein SetFocus für die nächste Eingabe..
  RechenOP:=2;// beliebig, aber eindeutigend;
  end;

procedure TForm1.malClick(Sender: TObject);
begin
Speicher :=Speicher *StrToFloat(Edit1.Text); // natürlich muß ein String vor der Berechnung wieder in eine Zahl gewandelt werden..
  Edit1.Text:=FloatToStr(Speicher); // Und den Wert aus Speicher wieder in das Editfeld
  Edit1.Setfocus;// und gleich wieder ein SetFocus für die nächste Eingabe..
  RechenOP:=3;// beliebig, aber eindeutigend;
  end;

procedure TForm1.geteiltClick(Sender: TObject);
begin
Speicher :=Speicher /StrToFloat(Edit1.Text); // natürlich muß ein String vor der Berechnung wieder in eine Zahl gewandelt werden..
  Edit1.Text:=FloatToStr(Speicher); // Und den Wert aus Speicher wieder in das Editfeld
  Edit1.Setfocus;// und gleich wieder ein SetFocus für die nächste Eingabe..
   RechenOP:=4;// beliebig, aber eindeutigend;
  end;

procedure TForm1.GleichzeichenClick(Sender: TObject);
begin
Case RechenOP of 1: Speicher:=Speicher+StrToFloat(Edit1.Text);   
                 2: Speicher:=Speicher-StrToFloat(Edit1.Text);
                 3: Speicher:=Speicher*StrToFloat(Edit1.Text);
                 4: Speicher:=Speicher/StrToFloat(Edit1.Text);
          end;  
          edit1.Text:=FloatToStr(Speicher);


end;

end.
Einloggen, um Attachments anzusehen!