Erstens kannst du die ganzen ButtonClicks auch in einem zusammenfassen, das heißt einfach überall im Objektinspektor unter Ereignisse in OnClick die selbe Prozedur eintragen. Außerdem brauchst du die Variable Zahl gar nicht soweit ich das sehe. Deine Prozedur kann dann so ausssehen:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.SpeedButtonXClick(Sender: TObject); begin Edit1.Text := Edit1.Text + (Sender as TSpeedButton).Caption; x := StrToFloat(Edit1.Text); end; |
Moerv hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.SpeedButton1Click(Sender: TObject); begin if edit1.Text := 0; then edit1.Text := ''; edit1.Text := edit1.Text + speedbutton1.caption; Zahl := edit1.Text; x := StrToFloat (Zahl); else edit1.Text := edit1.Text + speedbutton1.caption; Zahl := edit1.Text; x := StrToFloat (Zahl);
end; | |
Da müsste eigentlich ein Fehler kommen, dass der Typ des Ausdrucks Boolean sein muss oder so ähnlich, denn ein Vergleich geht mit = und nicht mit :=, denn := ist eine Zuweisung. Die andere Sache ist, dass du einen String nicht mit einer Zahl vergleichen kannst. Also muss es heißen:
Delphi-Quelltext
1:
| if Edit1.Text = '0' then |
Nun zu deinem if..else, ich gehe einmal davon aus, dass die Anweisungen alle in if bzw. else sollten, oder? Dann musst du das aber auch so hinschreiben, nämlich mit begin..end:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| if Edit1.Text = '0' then begin Edit1.Text := ''; Edit1.Text := Edit1.Text + SpeedButton1.Caption; ... end else begin ... |
Dann zu dem was du machst: Du setzt den Inhalt des Edits auf leer und fügst den danach trotzdem wieder mit in den neuen Wert ein. Da da aber nix drin stehst, fügst du doch ohnehin nur die Buttonüberschrift ein.

Also geht das selbe auch so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.SpeedButton1Click(Sender: TObject); begin if Edit1.Text = '0' then Edit1.Text := SpeedButton1.Caption else Edit1.Text := Edit1.Text + SpeedButton1.Caption; x := StrToFloat(Edit1.Text); end; |
bzw. wenn es der selbe ButtonClick für alle Buttons mit Zahlen ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.SpeedButtonXClick(Sender: TObject); begin if Edit1.Text = '0' then Edit1.Text := (Sender as TSpeedButton).Caption else Edit1.Text := Edit1.Text + (Sender as TSpeedButton).Caption; x := StrToFloat(Edit1.Text); end; |