Autor Beitrag
magic87
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45


Delphi 7, PHP
BeitragVerfasst: Di 15.08.06 12:32 
Hallo!
Ich bin neu hier und gerad angefangen delphi zu programmieren(2Wochen). Möchte einen Taschenrechner programmieren wie der von Windows nur mit den Grundrechenarten. Bin so weit das ich über die Buttons die Ziffern ins Editfeld eingeben kann und der sich die auch merkt über die Variable
Var Zahl : integer

Aber wie mache ich es das wenn man auf plus drückt und danach eine neue Zahl eintippen möchte, so dass die alte in dem selben Moment verschwindet und wenn man noch mal auf Plus drückt soll er die beiden Zahlen zusammen rechnen. Wie bei einem richtigen Taschenrechner halt. Das ganze soll in einem Editfeld geschehen. Hoffe mir kann jemand so ein bisschen auf die Sprünge helfen.

Wäre nett.. Liebe Grüe aus Oldenburg

magic
ManniTwo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 46

Win XP SP III, Ubuntu 8.04, Debian 5.0
Delphi 5 Pro; Delphi 2005; C++,C# (VS 2005); Java, Ruby (Eclipse)
BeitragVerfasst: Di 15.08.06 13:02 
Hi!

Zitat:
Aber wie mache ich es das wenn man auf plus drückt und danach eine neue Zahl eintippen möchte, so dass die alte in dem selben Moment verschwindet

tja....das einfachste ist wohl wenn du dir beim Klick auf einen Operator merkst, dass ein solcher geklickt wurde, zum Beispiel in einer Boolean-Varible und beim Klick auf einen Operanden also eine Zahl prüfst du diese Variable und löscht dann die angezeigte Zahl
(Edit1.Text := '') wenn vorher ein Operator geklickt wurde.

_________________
Wer andern eine Bratwurst brät, der hat ein Bratwurst-Brat-Gerät, oder anders:
ausblenden Delphi-Quelltext
1:
if Self.BraetAndernEineBratwurst then Self.HasBratwurstBratGeraet := true;					
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Di 15.08.06 13:31 
Titel: Taschenrechner
Hi Magic87
Die Frage, wie mache ich, dass... wird dich ein Leben lang begleiten. Allerdings, die meisten stellen sich dieser Thematik nicht, haben einfach Spass am Leben und geniessen ihre Freizeit. Aber... wir sind ja nicht die meisten.. und darum geb ich dir einen Tip:
Rechnen tust du mit deinen Variablen im Hintergrund, und damit das funktioniert, mußt du sie am Anfang auf 0 setzen.
Wenn du unbedingt mit nur einem Editfeld arbeiten möchtest, mußt du dir Schritte überlegen, wie du bspw. eine Eingabe tätigen kannst, wann du diese Zahl mit anderen Werten berechnen wirst und mit welchen Ereignis du dies auslöst und wie du dann bei einer Neueingabe den angezeigten Wert verschwinden lassen kannst.
Also, versuchen wir aufzulösen.
Es gibt das Ereignis onKeyDown eines Editfeldes. Damit könntest du einmal das Editfeld löschen. Das darf aber nur einmal geschehen und das eingegebene Zeichen soll auch erhalten bleiben. Also mußt du die Routine ausblenden, wenn du ein Zeichen eingegeben hast. Dies geschieht z.B. durch Zuweisung von NIL an das OnKeyDown-Ereignis.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
....
Procedure myForm.MyEditKeyDown(Sender: TObject;Var Key:Word; Shift: TShiftState);
Begin
  MyEdit.Text:='';           // Editfeld für neue Eingaben leeren
  MyEdit.OnKeyDown:=Nil;     // diese Routine für weitere Eingaben entfernen
  MyEdit.Text:=Chr$(Key);    // das Zeichen dem textfeld zuweisen
end;
.....


So, nun hast du ein Zeichen eingegeben und den Aufruf der Procedure MyEditKeyDown ausgeblendet. Die Eingaben sollten nun wieder funktionieren. Wenn du nun auf deinen mathematischen Operator, ich nehme an, ein Button mit plus, minus, mal oder geteilt drückst, machst du zuerst deine Berechnung mittels deiner Variablen. Dann weist du durch entsprechende Umwandlung das Ergebnis dem Editfeld zu und danach gibst du wieder den Aufruf von KeyDown frei, indem du der Wariablen die Prozedur wieder zuweist.
Sieht dann ungefähr so aus

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
....
Procedure myForm.Buttonxclick(Sender: TObject); // angenommen Plus
Begin
  Calcwert:=Calcwert+StrToInt(MyEdit.Text); // angenommen, Calcwert ist eine globale Integer-Variable
  MyEdit.Text:=IntToStr(Calcwert);          // Ergebnis dem Editfeld zuweisen
  MyEdit.OnKeyDown:=MyEditKeyDown;          // und die OnKeyMethode zuweisen
end;
.....


ungeprüft, aber so müßte es gehen...
Ich hoffe dir gehelft zu haben
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
magic87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45


Delphi 7, PHP
BeitragVerfasst: Di 15.08.06 13:48 
ja.. danke! mir haben beide Antworten schon ein bisschen weiter geholfen! Allerdings wollte ich den Taschenrechner mit meinem jetzigen Wissens programmieren! Ist die Aufgabe meines Lehrers. Und die Sachen die in deinem Quelltext waren kamen mir noch bisschen spanisch vor! Habe bisher variablen wie boolean, integer, real, string. Die einfachen Zuweisungen und Methoden wie if..then...else, function, und das wars auch schon fast! Kann ein Taschenrechner so mit 3 Edits und Zahlen die man selber eingibt locker programmieren.. aber mit Buttons zum eingeben und einem Editfeld sieht das ganze irgendwie viel schwerer aus!
Wäre nett, wenn ihr mal so ein bisschen Anfängerdelphi benutzen würdet! Freue mich auf Rückantworten.
Liebe Grüße
magic87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45


Delphi 7, PHP
BeitragVerfasst: Di 15.08.06 14:27 
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:
private
    { Private-Deklarationen }
     Zahl : integer;
     public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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

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

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


procedure TForm1.btplusClick(Sender: TObject);
begin
Zahl := StrToInt(Edit1.text);
end;

end.


So sieht mein jetziger Quelltext aus. Ist also noch nicht viel gemacht. Aber villeicht kann mir jemand für den nächsten Schritt ein Tipp geben! Irgendwie weiß ich nicht so recht wie ich jetzt anfangen bzw. weitermachen soll. Bin für jeden Tipp dankbar!

Liebe Grüße
uwewo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 154



BeitragVerfasst: Di 15.08.06 14:30 
Hi magic86,

einfacher? Ok versuch mal so.

Nenne eine Variable "Summe" und eine "RechenArt" oder so ähnlich.
Wenn Du an Deinem Rechner die Taste +,-,*,/ drückst weist Du Deiner
Variablen "Summe" den Wert des Editfeldes zu, gleichzeitig muß nun die Variable
"Rechenart" auch einen Wert zugewiesen werden.
z.B.

+ = 1
- = 2
* = 3
/ = 4

Nun mußt Du Nur noch den Wert in der Variablen "Rechenart" auswerten z.B.
ausblenden Delphi-Quelltext
1:
2:
if Rechenart = 1 then Summe := Summe + FloatToStr(Editfeld.text);
if Rechenart = 2 then

usw.

oder
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
case Rechenart of
  1 : Summe := Summe + FloatToStr(Editfeld.text);
  2 : Summe := Summe - FloatToStr(Editfeld.text);
  3 :
  4 :  
end;


Hoffe das ist einfacher für Dich.
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Di 15.08.06 14:30 
du könntest, wenn auf + ( bzw -, *, /) gedrückt wurde, prüfen, ob in dem edit-feld etwas steht. wenn ja, packst du es zu deiner variable dazu variable := variable + inttostr(edit1.text) und zeigst dann den inhalt deiner variable im edit veld an mit edit1.text := strtoint(variable)
kommt das deiner vorstellung von "einfachem anfänger-delphi" etwas näher? ;-)
magic87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45


Delphi 7, PHP
BeitragVerfasst: Di 15.08.06 15:17 
danke für eure Hilfe! ist echt super! hat zwar geklappt soweit! aber ich verstehe die Zeile nicht: meinetwegen für
var = Zahl : integer

Dann schreibt man wie du
Zahl := Zahl + StrToInt(edit1.text);
Kannst du mir die Zeile nochmal erklären? Das heißt ja dann:
Zahl bekommt den Wert von sich selber plus den Wert der im edit1.text steht! Aber was ist der Wert von Zahl?
Wäre nett, wenn du mir das noch beantworten könntest!
Liebe Grüße
Dennis
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Di 15.08.06 16:34 
Titel: Taschenrechner
Hi
Ich nochmal ganz kurz...
Da hab ich mir solche Mühe gegeben, einen "einfachen" code zu erklären...
tse, diese Anfänger :wink:
Ok, Du mußt natürlich deiner Variablen einen Anfangswert zuweisen. Das kannst du bspw. in der FormCreate, das ist, wenn du in deine Form einen Doppelclick machst, bist du in dieser Procedure im Editor. Da schreibst du einfach

ausblenden Delphi-Quelltext
1:
2:
3:
4:
....
Wert:=0// bei Strichrechnen
Wert:=1// bei Punktrechnen
.....


Außerdem hast du ja im Rechner eine C-Taste ( Clear oder so )
Da macht es Sinn, diese einzupflegen und beim Click darauf ebenfalls die Variable Wert vorzubesetzen.

Nun kannst du folgendes machen, um mal zu if... zu kommen. Der Unterschied bei Punkt und Strichrechnen ist im Anfangswert. Daher mußt du den Inhalt der Variablen auswerten und der Rechenfunktion entsprechend anpassen. Das gilt nur für den Anfangswert.
Also: Variable Wert auf 0 mit

ausblenden Delphi-Quelltext
1:
Wert:=0;					


Nun einen Wert eingegeben und eine Rechenoperation. Beim Auslösen der Rechenoperation prüfst du den Inhalt von Wert:
Also in der Ereignisroutine von der Multiplikation sowie der Division setzt du folgende Zeile an den Anfang:

ausblenden Delphi-Quelltext
1:
If Wert=0 then Wert:=1;					


danach führst du die Rechenoperation aus z. B.

ausblenden Delphi-Quelltext
1:
2:
3:
Wert:=Wert*StrToInt(Edit1.Text); 
// oder 
Wert:=Wert/StrToInt(Edit1.Text);


Bei einer Strichrechnung brauchts keine Änderung vom Startwert der Variable Wert

ausblenden Delphi-Quelltext
1:
2:
3:
Wert:=Wert+StrToInt(Edit1.Text);
// oder 
Wert:=Wert-StrToInt(Edit1.Text);


Du hattest in deinem Posting erklärt, das du verstanden hast, das der Variablen "Wert" das Rechenergebnis aus der rechten Seite zugewiesen wird.

Na ja, aller Anfang ist schwer...., du schaffst das schon.
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 15.08.06 18:13 
Titel: Re: Taschenrechner
user profile iconoldmax hat folgendes geschrieben:


Nun einen Wert eingegeben und eine Rechenoperation. Beim Auslösen der Rechenoperation prüfst du den Inhalt von Wert:
Also in der Ereignisroutine von der Multiplikation sowie der Division setzt du folgende Zeile an den Anfang:

ausblenden Delphi-Quelltext
1:
If Wert=0 then Wert:=1;					

Ähm.. da bekommst du aber spätestens bei dieser Rechnung hier Probleme:
1
-1
*5
Richtig: (1-1)*5 = 0*5 = 0
Dein Programm: (1-1)*5 = "oh! da steht 0! aber if wert=0 then wert:=1..." 1*5 = 5
=> Falsches Ergebnis... oder?

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Di 15.08.06 19:22 
Titel: immer noch Taschenrechner
Hi

Also, klar, ich weiß schon, warum ich da die Finger von lasse, vonne Mathe. Aber da hat unser Magic87 nun wirklich ein Problem, oder ? weil, wenn Eingabe 5 und in Wert-Variable steht 0 und nun würden wir die 5 so gern mit 3 multiplizieren......

Na dann mach mal.

OK, es war vielleicht ein Schnellschuß, aber wie immer kommen dann die Fragen, wie komme ich weiter, warum stimmen die Ergebnisse nicht, wo setze ich auf's falsche Pferd. Es wär ja so schön einfach gewesen mit der Ausblenderei der Procedur KeyDown, aber er will ja da nich ran, er will's zu Fuß haben..

Also, wie wär's mit einem Kompromiß. Die Null machen wir nur bei der 1. Rechenoperation nach einem "clear" oder Neustart zu 1 für's Punktrechnen, danach nieee wieder. Also, merk dir, wenn du eine Rechnung beginnst. Vielleicht so mit einer weiteren Variable


 Anfang   : Boolean;

Nun mußt du die Anfangswerte setzen, zum Beipiel in einer Clearbutton-Procedur

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Procedure MyForm.ButtonCClick(Sender : TObject); // diese doppel"C" ist kein Schreibfehler, sondern der Name des Clear-Buttons

Begin
  Wert:=0;            // Rechenvariable auf 0 setzen
  Anfang:=True;       // Zeichen, das erste Rechenoperation folgt auf Wahr
  MyEdit.Text:='0';   // Ach ja, dem Eingabefeld einen Wert geben, natürlich 0

end;


na ja , das sagte ich ja schon, natürlich auch beim Programmstart

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Procedure MyForm.FormCreate(Sender : TObject); // Hier startet dein Programm....
Begin
  Wert:=0;            // Rechenvariable auf 0 setzen
  Anfang:=True;       // Zeichen, das erste Rechenoperation folgt auf Wahr
  MyEdit.Text:='0';   // Ach ja, dem Eingabefeld einen Wert geben, natürlich 0

end;


Nun schreibst du einfach in alle deine Rechenoperationsbutten als letzte Zeile Anfang:=False;

z.B.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Procedure MyForm.ButtonMulClick(Sender : TObject); 
Begin
  If Anfang and ( Wert=0then Wert:=1;  // auch bei der Division. Das sichert die einmalige Umsetzung auf 1
   ....                                  // in diesen Zeilen steht dein weiterer Code
   ....
   Anfang:=False;                        // und nun setzt du dein Anfang-Zeichen auf falsch

end;


So, das soll's erst mal sein. Vermutlich sind deine Procedure-Köpfe anders, aber ich denke du erkennst schon, was wichtig ist. Und bei dem ganzen Spass nicht vergessen, es gibt immer den Fehler, den man logisch macht. Der taucht in keiner Fehlerroutine auf, das Ergebnis ist einfach falsch. Syntaxfehler, klar, die erkennt der Compiler, aber Denkfehler.... ??! Wie denn auch. Der Rechner macht genau das, was du ihm sagst und meistens glaubst du nur, ihm was anderes gesagt zu haben. Da isser ziemlich stur.

ok. Viel Spass

oldmax

_________________
Zier dich nich so, ich krieg dich schon....
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Mi 16.08.06 06:54 
Titel: noch was zum Taschenrechner
Hi
Bevor mir wer anderes drauf kommt.. der Rechner wird vermutlich nie richtig rechnen. Schließlich gibt's diese alte blöde Regel Punkt vor Strich und nich rechnen in Reihenfolge. Da vermute ich mal ein kleines Problemchen. Das is nich ganz so einfach zu lösen und deshalb mach ich hier nur einen Hinweis.
3*4+5*7 ist richtig 47 und nicht 119...
Na denn, zeig was du kannst.
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
starsurfer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 334

Win 95, Win 98, Win XP, Win Vista, Linux
D5 Enterprise ,D2005, D6 Personal, Visual C++ Express 2005, C++ Builder 6 E, Dev-C++
BeitragVerfasst: Mi 16.08.06 09:40 
Ich hab son Ding mal vor langer langer Zeit aus Langeweile programmiert mit Recht einfachen Befehlen.

Es ist auskommentiert, guggst dir einfach mal an.

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:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
...

  private
    procedure variablen_uebergabe;//selbst definierte procedure
    procedure rechenarten;//selbst definierte procedure
    procedure zahl_neu;//selbst definierte procedure

...

var
  Form1: TForm1;
  zahl1,zahl2,ergebnis:real; //3 komma zahlen
  zahl1_eingegeben,istgleich,zahl2_eingegeben,zahl_loeschen,rechenoperation_gewaehlt:bool; //5 werte die richtig udn falsch enthalten können
  rechenart:integer; //eine variable die ganze zahlen enthält
implementation

{$R *.DFM}

procedure tform1.zahl_neu;  //selbst definierte procedure : Schaut ob sich die Zahl wechselt (zB wenn man "+" geklickt hat und ne neue Zahl eingeben will)
begin
rechenoperation_gewaehlt:=false;
istgleich:=false; //istgelich wurde nich gedrückt
if zahl_loeschen=true then  //prüft ob er die zahl im feld löschen darf
   begin
   edit1.text:='';         //wenn ja lösche sie,
   zahl_loeschen:=false;   //und hebe den lösch befehl auf
   end;
end;

procedure tform1.variablen_uebergabe;  //selbst definierte procedure: Zahlen aus dem Edit Feld werden an die Variablen übergeben
begin
istgleich:=false; //istgleich wurde nicht gedrückt
if (zahl2_eingegeben=false)and(zahl1_eingegeben=true) then // wenn die erste zahl eingegeben aba die zweite nicht dann
   begin
   zahl2:=strtofloat(edit1.text);  //übernehme sie
   zahl2_eingegeben:=true;         //notiere das sie übernommen wurde
   zahl_loeschen:=true;            //kann gelöscht werden
   end;                                  //dient zur zahlen übernahme
if (zahl1_eingegeben=false) then    //wenn die erste zahl nicht eingegeben ist dann
   begin
   zahl1:=strtofloat(edit1.text);   //übernehme sie
   zahl1_eingegeben:=true;          //notiere das sie übernommen wurde
   zahl_loeschen:=true;             //kann aus dem fled nun gelöscht werden
   end;
if (zahl2_eingegeben=true)and(zahl1_eingegeben=true) then //sind beide zahlen eingegeben dann
   begin
        rechenarten;               //rechne aus; in selbst erstellter procedure
        zahl1:=strtofloat(edit1.text);  //übernehme ergebnis als erste zahl
        zahl2_eingegeben:=false;     //zweite zahl muss noch eingegeben werden also, 2.zahl ist nicht eingegeben
   end;
end;


procedure TForm1.Button1Click(Sender: TObject);// Taste für 7
begin
zahl_neu;//aufruf eigene procedure, schaut ob er die zahl löschen darf
edit1.text:=edit1.text+'7'//fügt dem edit feld die 7 zu
end;

procedure TForm1.Button2Click(Sender: TObject);// Taste für 8
begin
zahl_neu; //aufruf eigene procedure, schaut ob er die zahl löschen darf
edit1.text:=edit1.text+'8';  //fügt dem edit feld die 8 zu
end;

procedure TForm1.Button3Click(Sender: TObject); // Taste für 9
begin
zahl_neu;//aufruf eigene procedure, schaut ob er die zahl löschen darf
edit1.text:=edit1.text+'9';  //fügt dem edit feld die 9 zu
end;

procedure TForm1.Button4Click(Sender: TObject); // Taste für 4
begin
zahl_neu;//aufruf eigene procedure, schaut ob er die zahl löschen darf
edit1.text:=edit1.text+'4';   //fügt dem edit feld die 4 zu
end;

procedure TForm1.Button5Click(Sender: TObject); // Taste für 5
begin
zahl_neu;//aufruf eigene procedure, schaut ob er die zahl löschen darf
edit1.text:=edit1.text+'5';   //fügt dem edit feld die 5 zu
end;

procedure TForm1.Button6Click(Sender: TObject); // Taste für 6
begin
zahl_neu;//aufruf eigene procedure, schaut ob er die zahl löschen darf
edit1.text:=edit1.text+'6';   //fügt dem edit feld die 6 zu
end;

procedure TForm1.Button7Click(Sender: TObject);   // Taste für 1
begin
zahl_neu;//aufruf eigene procedure, schaut ob er die zahl löschen darf
edit1.text:=edit1.text+'1';   //fügt dem edit feld die 1 zu
end;

procedure TForm1.Button8Click(Sender: TObject);   // Taste für 2
begin
zahl_neu;//aufruf eigene procedure, schaut ob er die zahl löschen darf
edit1.text:=edit1.text+'2';   //fügt dem edit feld die 2 zu
end;

procedure TForm1.Button9Click(Sender: TObject);  // Taste für 3
begin
zahl_neu;//aufruf eigene procedure, schaut ob er die zahl löschen darf
edit1.text:=edit1.text+'3';   //fügt dem edit feld die 3 zu
end;

procedure TForm1.Button10Click(Sender: TObject);   // Taste für 0
begin
zahl_neu;//aufruf eigene procedure, schaut ob er die zahl löschen darf
edit1.text:=edit1.text+'0';   //fügt dem edit feld die 0 zu
end;

procedure TForm1.Button11Click(Sender: TObject);  // Taste für +/-, damit kann man die Zahl im Edit Feld negativ machen (- davorsetzen)
var zeile:string;   // Eine Variable die nur für diese Procedure
                    // existiert und text aufnehmen kann
begin
zeile:=edit1.text; // inhalt des edit´s feldes an die variable übergeben
if zeile='' then exit;  //testen ob variable leer ist, wenn ja Procedure beenden
if zeile[1]='-' then delete(zeile,1,1else insert('-',zeile,1); //testen ob das erste Zeichen ein '-' ist, wenn ja lösche es, wenn nein setze es
edit1.text:=zeile; // der inhalt der Variable wird dem edit feld übergeben
end;

procedure TForm1.Button12Click(Sender: TObject); //Komma einfügen
var zeile:string// Eine Variable die nur für diese Procedure
                    // existiert und text aufnehmen kann
begin
zeile:=edit1.text; // inhalt des edit´s feldes an die variable übergeben
if pos(',',zeile)=0 then zeile:=zeile+','//suchen ob es schon ein komma gibt, pos() liefert 0 wenn keins da is
edit1.text:=zeile; // der inhalt der Variable wird dem edit feld übergeben
end;

procedure TForm1.Button18Click(Sender: TObject);  //Taste um eine Stelle zurückzusetzen
var zeile:string// Eine Variable die nur für diese Procedure
                    // existiert und text aufnehmen kann
begin
zeile:=edit1.text; // inhalt des edit´s feldes an die variable übergeben
delete(zeile,length(zeile),1); //letztes zeichen der variablen löschen
edit1.text:=zeile; // der inhalt der Variable wird dem edit feld übergeben
end;


procedure TForm1.Button19Click(Sender: TObject); //voller reset
begin
edit1.text:='';//edit feld leeren
zahl1:=0;   //zahl1 0 setzten
zahl2:=0;   //zahl2 0 setzen
zahl1_eingegeben:=false;  //zahl1 ist nicht eingegeben
zahl2_eingegeben:=false;  //zahl2 ist nicht eingegeben
rechenart:=0;   //rechenart ist 0
end;

procedure TForm1.Button15Click(Sender: TObject);// Taste * gedrückt
begin
if rechenoperation_gewaehlt=true then   //ist schon eine rechenoperation gewählt dann:
   begin
   rechenart:=1//übernehme zwar die garde gewählte rechnart aba
   exit;         //rechnet nicht gleich damit sondern springt aus der schleife
   end;
rechenoperation_gewaehlt:=true;
variablen_uebergabe; //übernehme zahl aus edit feld in eigener procedure
rechenart:=1;        //stellvertettend für "*"
end;

procedure TForm1.Button16Click(Sender: TObject); // Taste / gedrückt
begin
if rechenoperation_gewaehlt=true then //ist schon eine rechenoperation gewählt dann:
   begin
   rechenart:=2///übernehme zwar die garde gewählte rechnart aba
   exit;         //rechnet nicht gleich damit sondern springt aus der schleife
   end;
rechenoperation_gewaehlt:=true;
variablen_uebergabe; //übernehme zahl aus edit feld in eigener procedure
rechenart:=2;        //stellvertettend für "/"
end;

procedure TForm1.Button14Click(Sender: TObject); // Taste + gedrückt
begin
if rechenoperation_gewaehlt=true then //ist schon eine rechenoperation gewählt dann:
   begin
   rechenart:=3;//übernehme zwar die garde gewählte rechnart aba
   exit;         //rechnet nicht gleich damit sondern springt aus der schleife
   end;
rechenoperation_gewaehlt:=true;
variablen_uebergabe;   //übernehme zahl aus edit feld in eigener procedure
rechenart:=3;          //stellvertettend für "+"
end;

procedure TForm1.Button13Click(Sender: TObject); // Taste - gedrückt
begin
if rechenoperation_gewaehlt=true then //ist schon eine rechenoperation gewählt dann:
   begin
   rechenart:=4;//übernehme zwar die garde gewählte rechnart aba
   exit;         //rechnet nicht gleich damit sondern springt aus der schleife
   end;
rechenoperation_gewaehlt:=true;
variablen_uebergabe;  //übernehme zahl aus edit feld in eigener procedure
rechenart:=4;         //stellvertettend für "-"
end;

procedure TForm1.FormCreate(Sender: TObject);//Werten den Variablen zuweisen
begin
zahl1_eingegeben:=false; //zahl 1is nicht eingegeben
zahl2_eingegeben:=false; //zahl2 au nich
zahl_loeschen:=false;  //und es wird auch keine zahl gelöscht
istgleich:=false; // istgleich wurde noch nich gedrückt
rechenoperation_gewaehlt:=false;// es wurde noch keine gewählt
end;

procedure tform1.rechenarten; //selbst definierte Prozedure: sorgt für die Berechnung der Werte+Ausgabe
begin
case rechenart of    //case..of..end isses gleiche wie mehrere if..then..else
        1:edit1.text:=floattostr(zahl1*zahl2);  //rechne mal wenn rechenart=1 und gibs gleich aus
        2:edit1.text:=floattostr(zahl1/zahl2);  //rechne durch wenn rechenart=2 und gibs gleich aus; hier muss ev noch ne Fehlerbehandlung hin... da zZ er ne Fehlermedlung ausgibt und nur mit Reset es weiter geht 
        3:edit1.text:=floattostr(zahl1+zahl2);  //rechne plus wenn rechenart=3 und gibs gleich aus
        4:edit1.text:=floattostr(zahl1-zahl2);  //rechne minus wenn rechenart=4 und gibs gleich aus
        end;
end;

procedure TForm1.Button17Click(Sender: TObject); // Taste fürs "="
begin
if istgleich=true then    //sollte "=" vorher schon gedrückt worden sein, dann:
   begin
   zahl1:=strtofloat(edit1.text);//edit1 inhalt wird zur zahl 1
   rechenarten;                  //und wird mit zahl 2 verrechnet
   end;
if zahl1_eingegeben=true then   //wenn zahl1 schon eingegegeben ist dann
   begin
   zahl2:=strtofloat(edit1.text); //wird edit inhalt zur zahl 2
   rechenarten;                   //es wird gerechnet
   zahl1_eingegeben:=false;       //zahl1 ist nun nicht mehr vorhanden
   zahl2_eingegeben:=false;       //zahl2 mus auch neu eingegegeben werden
   zahl_loeschen:=true;           //zahl darf gelöscht werden
   istgleich:=true;               //es wurde auf "=" geklickt
   end;

end;


Funktionsweise:

-1te Zahl eingeben
-Rechenart wählen
-Programm merkt sich das erste Zahl eingebenen ist UND welcher Wert
-2te Zahl eingeben
-"=" oder Rechnenart wählen
-Programm merkt sich das zweite Zahl eingebenen ist UND welcher Wert
-gibt Ergebnis aus und löscht Zahl1 und Zahl2 und die Rechnart, notiert sie als NICHT eingebenen
- sollte jetzt direkt eine neue Zahl eingegeben werden wird die alte Zahl(das Ergebnis im edit Feld) gelöscht
-sollte ne Rechenart gewählt werden dann wird das Ergbnis wieder übernommen
-sollte eine Aufgabe berechnet sein (Z.B. 5+4=9 ) und dann weiter aufs "=" geklickt werden rechnet er weiter "4" zum Eregbnis dazu

Und das Ding rechnet richtig :D

_________________
GEIZ IST GEIL! - Ihr Sozialamt
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Mi 16.08.06 10:15 
Schön, starsurfer!
Aber ich glaube nicht, dass es Sinn der Sache war, ihm einen kompletten Taschenrechner dahin zu stellen... das hätte er mit Sicherheit (und ein wenig Hilfe) auch selbst geschafft und sogar was dabei gelernt...
Naja...
Jinnay
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 70


Delphi 6
BeitragVerfasst: Mi 16.08.06 10:46 
Ich würd mal sagen da ist jetzt Ehrgeiz gefragt, entweder er kopiert es sich eins zu eins oder er erarbeitet sich aus dem Taschenrechner einen eigenen, manchmal hilft eine Vorlage :wink:
magic87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45


Delphi 7, PHP
BeitragVerfasst: Do 17.08.06 09:19 
Nein.. ich will den Quelltext nicht kopieren.. ich bin ihn durchgegangen und gucke ob mir dadurch etwas klarer wird. Konnt eigentlich alles so nachvollziehen. Aber das mit den boolischen Werten hab ich noch nicht ganz so begriffen. Ich weiß zwar das boolean für wahr oder falsch steht... aber so im Zusammenhang mit dem Quelltext kapier ich die Variable boolean noch nicht so richtig! Naja.. werd ich auch wohl noch irgendwann hinterkommen! Wäre auch dankbar wenn mir das jemand mit seinen Worten erklären könnte. Ansonsten danke erstmal für die ganze Hilfe!
Liebe Grüße aus Oldenburg
Dennis
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Do 17.08.06 09:21 
Guten Morgen! :wink2:

user profile iconmagic87 hat folgendes geschrieben:
Aber das mit den boolischen Werten hab ich noch nicht ganz so begriffen. Ich weiß zwar das boolean für wahr oder falsch steht... aber so im Zusammenhang mit dem Quelltext kapier ich die Variable boolean noch nicht so richtig!

Welche Variable(n) meinst du genau?

Lg Martin

_________________
Ein Nutzer der Ecke ;-)
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Do 17.08.06 10:01 
Titel: Versuch, den Booleantyp zu erklären
Hi
Ich denke, er meint Boolean im allgemeinen. Wofür man eine boolean z.B. braucht.
Also, ein Beispiel:
nehmen wir an, du hast Variablen definiert namens MyFlag1 und MyFlag2 vom Typ Boolean. Auf einen Variablennamen "kleiner" oder "wahr" hab ich absichtlich verzichtet, um zu zeigen, es ist die x-beliebige Variable vom Typ boolean.
Klar ist: 3 ist kleiner 5 also lautet z.B. eine If-Abfrage

ausblenden Delphi-Quelltext
1:
2:
3:
4:
If 3 < 5 then // keine Klammer nötig
begin
  ....
end;

Eigentlich ist nicht wichtig 3<5 sondern das logische Erggebnis daraus, um der If -Abfrage Sinn zu geben. Also, If "true" then ...
Soweit sollte es klar sein.

Normalerweise stehen für die Zahlen 3 und 5 Variablen mit x-beliebigen Werten und du willst nur Werte erwischen, die kleiner der 2ten Variable sind.
Nehmen wir weiter an, du möchtest Zahlen in einem Bereich von bis haben, dann ist's schon etwas komplizierter.
Also nehmen wir KleinerWert und GrosserWert sowie Wert als Integervariablen auf.
Wenn Wert grösser KleinerWert und kleiner GrosserWert ist, ist unsere Bedingung erfüllt.
In der If Abfrage sieht das wie folgt aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
If (Wert>KleinerWert) and (Wert<GrosserWert) then 
// Klammern erforderlich, sonst Mecker vom Compiler
begin
...
end;


Manchmal hat man aber wesentlich mehr Bedingungen zu betrachten und da helfen schon mal Boolean-Variable, um den Code lesbar zu halten.

Ein wenig Umständlich, aber um es deutlich zu machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if Wert>KleinerWert then MyFlag1:=True else MyFlag1:=False;
if Wert<GrosserWert then MyFlag2:=True else MyFlag2:=False;
If MyFlag1 and Myflag2 then // keine Klammern nötig, weil schon Boolean
begin
....
end;


es geht natürlich auch einfacher
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
.....
MyFlag1:=Wert>KleinerWert;  // denn Ergebnis ist entweder Wahr oder Falsch
MyFlag2:=Wert<GrosserWert ;
.....

end;



Ich hoffe, diese Erklärung hilft dir ein wenig. Natürlich ist eine Boolean auch für andere Zwecke nützlich, um sich z. B. bestimmte Bearbeitungsschritte zu merken, aber fast immer ist diese Variable mit If, Repeat oder While in Verbindung zu bringen, nur um die wichtigsten zu nennen.
Natürlich ist auch eine Zuweisung an andere Boolsche Variablen zulässig, sowie Visible, Checked, Enabled etc.
Du kannst mal folgendes machen, das geht schnell und ist auch leicht verständlich:
Auf eine Form 3 Editfelder und 2 Panel darunter, so in der größe der Editfelder. und noch ein Button dazu.
Editfeld 1 hat den kleinen Wert, Editfeld 2 ist der Prüfwert und Editfeld 3 ist der obere Wert.
nun der Code, den du in die Ereignisprocedure des Buttons schreibst:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Procedure Form1.Button1click(Sender : TObject);
Begin
  if Edit2.Text>Edit1.Text then MyFlag1:=True else MyFlag1:=False;
  if Edit2.Text>Edit3.Text then MyFlag2:=True else MyFlag2:=False;
  Panel1.Visible:=MyFlag1;
  Panel1.Visible:=MyFlag1;

end;


Probier's aus und ich denke, es wird dir etwas klarer, wofür Boolean-Variablen brauchbar sind....
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
magic87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45


Delphi 7, PHP
BeitragVerfasst: Di 22.08.06 12:19 
Hallo! ich bins nochmal! Habe meinen Taschenrechner soweit fertig. Habe auch ein paar Sachen von Starsurfer abgeguckt wenn ich ehrlich sein soll. Konnte eigentlich alles nachvollziehen. Aber die Procedure Variablenuebergabe habe ich irgendwie nicht verstanden. Wäre nett wenn mir das jemand mit seinen Worten erklären könnte!
Liebe Grüße
Dennis
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 22.08.06 13:41 
ich wollte nur anmerken, falls es nicht schon passiert ist, das du die Variablen in die du die erste Zahl speicherst, besser von typ Float ist da man deutlich höhere Zahlen erreichen kann als mit Integer! (jedoch kann dabei die genauigkeit flöten gehen.: alternative für genauere Zahlen: Longint)

viel Spass noch!

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.