Du hast doch beschrieben, was du machen musst
Als erstes gibt der Benutzer ein, was die erste Zahl ist.
Also machst du da einfach ganz am Anfang (du meintest Button2 würde das Zurücksetzen?) "FErsteZahl" oder wie du das genannt hattest" auf 0.
Wenn jetzt jemand auf die 1 drückt, dann willst du ja das in FErsteZahl statt 0 jetzt 1 steht. Nun könntest du einfach sagen: FErsteZahl := 1. Aber was ist, wenn man 11 haben will? Deshalb musst du das etwas erweitern
Und zwar kommt eine Stelle hinzu und das macht man im Dezimalsystem mit einer Multiplikation.
So jetzt wird es etwas kompilizierter. Und zwar wenn du auf einem Button (0-9) drückst dann wird im "OnClick"-Ergebnis das aufgerufen:
Delphi-Quellcode:
procedure TForm1.ButtonZifferClick(Sender : TObject);
begin
// In Sender steht die Komponente drinne die das ausgelöst hat. Hiermit teste ich
// ob darin ein Button steht
if Sender is TButton then
begin
// Jetzt nehmen wir die Zahl mal 10
// Also wenn wir vorher 1 hatten und jetzt die 2 gedrückt haben wollen wir ja 12
// Und 12 ist ja: 1 * 10 + 2 also 10 * WasVorherWar + WasJetztGedrücktWurde
FErsteZahl := FErsteZahl * 10;
// Und ganz zum schluss musst du ja das neue Ergebnis hinzufügen
// Dazu gucken wir, welcher Text im übergebenen Button stand (dafür das if da oben)
FErsteZahl := FErsteZahl + StrToInt(TButton(Sender).Caption);
end;
end;
So als nächstes solltest du noch ein Operator hinzufügen. Damit du nachher auch weißt was gedrückt wurde.
Also du hast die Buttons "+", "-", "*" und "/". Wenn man darauf klickt wird jetzt folgende Methode ausgeführt:
Delphi-Quellcode:
procedure TForm1.ButtonOperatorClick(Sender : TObject);
begin
// In Sender steht die Komponente drinne die das ausgelöst hat. Hiermit teste ich
// ob darin ein Button steht
if Sender is TButton then
begin
// Jetzt speichern wir einfach den Operator
FOperator := TButton(Sender).Caption[1];
// Dazu nehme ich das erste Zeichen aus dem Text.
// Dann die zweite Zahl zurücksetzen
FZweiteZahl := 0;
end else
// Wenn im Sender kein Button stand dann den Operator "ungültig" setzen
FOperator := #0;
end;
Damit sind wir schon fast fertig. Jetzt müssen wir den Inhalt aus
ButtonZifferClick verbessern. Bisher haben wir da ja nur die erste Zahl gesetzt. Jetzt wollen wir da auch die zweite Zahl setzen. Dazu modifizieren wir den Code:
Delphi-Quellcode:
procedure TForm1.ButtonZifferClick(Sender : TObject);
begin
if Sender is TButton then
begin
// NEU: Wenn der Operator "ungültig" ist, dann ändern wir die erste Zahl, ansonsten die zweite
if FOperator = #0 then
begin
FErsteZahl := FErsteZahl * 10 + StrToInt(TButton(Sender).Caption);
end else
begin
FZweiteZahl := FZweiteZahl * 10 + StrToInt(TButton(Sender).Caption);
end;
end;
end;
Ich habe dazu den Code etwas optimiert und die Kommentare raus genommen. Als letzten Schritt müssen wir dann nur noch etwas Code ausführen, wenn der "="-Button gedrückt wird:
Delphi-Quellcode:
procedure TForm1.ButtonGleichClick(Sender : TObject);
begin
// Jetzt überprüfen wir welcher Operator gewählt wurde
case FOperator of
'+' : LErgebnis.Caption := IntToStr(FErsteZahl + FZweiteZahl);
'-' : LErgebnis.Caption := IntToStr(FErsteZahl - FZweiteZahl);
'*' : LErgebnis.Caption := IntToStr(FErsteZahl * FZweiteZahl);
'/' : LErgebnis.Caption := FloatToStr(FErsteZahl / FZweiteZahl);
else LErgebnis.Caption := 'Unvollständige Eingabe';
end;
FErsteZahl := 0;
FZweiteZahl := 0;
FOperator := #0
end;
So das ist jetzt nicht 100% zu übernehmen. Aber versuche bitten den Code erst zu verstehen.
MfG
xZise
PS: Anfangs war das Problem, dass du "Button.Text" hattest und auch ein Self hat da nicht geholfen
Aber die Codevervollständigung (Strg+Leerzeichen) hilft dir da gerne!