Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Caption eines Edit Feld bei einem Taschenrechner ändern etc.
Moerv - Sa 11.10.08 00:23
Titel: Caption eines Edit Feld bei einem Taschenrechner ändern etc.
Abend ersma. :)
also wir haben in der schule grade mit delphi angefangen, finds eig. ganz interessant, nur unser lehrer vermittelt das ziemlich schlecht.
naja folgendes problem:
wir sollen einen taschenrechner mit einem edit feld programmieren was soweit eig. au ganz gut läuft, würd aber gern wissen wie man zB das "edit1" im edit feld von anfang an löscht bzw. ändert sonst erscheint immer ne fehlermeldung wenn mans nicht von hand macht.
am liebsten würd ichs ähnlich wie beim windows rechner habn dh das von anfang ne 0 angezeigt wird & diese dann bei eingabe einer zahl überschriebn bzw bei nem komma erhaltn bleibt
würd mich freuen wenn ihr mir en paar denkansätze liefern könntet oder ähnliches.
danke schonmal :)
jaenicke - Sa 11.10.08 00:42
:welcome: und hallo ;-)
Das Löschen am Anfang kannst du ja einfach schon im Objektinspektor machen, wenn du in Delphi das Edit anklickst. Da steht unter Text das ja drin und du kannst es entfernen oder durch eine 0 ersetzen.
Alternativ kannst du auf das Formular doppelklicken und dann dort in FormCreate hineinschreiben:
Auf die Eingabe reagieren kannst du zum Beispiel in OnKeyPress und dort ggf. den Inhalt löschen, wenn nur die aktuelle Eingabe drin stehen soll dann, etc.
Moerv - Sa 11.10.08 02:04
danke soweit schonmal :)
wusste doch das das erste sowas einfach war^^
letzteres versteh ich dann aber leider nicht mehr, hab ein bisschen mit dem onkeypress ereignis rumprobiert tut sich aber nie was
hab den rechner au mit speedbuttons geschriebn also das man die zahlen anklickt
also mein ansatz wäre etwas wie zb
Delphi-Quelltext
1: 2: 3: 4:
| if speedbutton1click,speedbutton2click etc. then edit1.text := ''; x := 0 edit1.text := speedbutton1.caption,speedbutton2.caption usw |
bleibt noch die frage wo sowas dann hinmüsste
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - Sa 11.10.08 02:09
Ach so hast du das gemacht. Das heißt eine direkte Eingabe ist nicht möglich?
Dann geht OnKeyPress natürlich nicht, aber dann ist das ganze ja noch einfacher. Du hast ja dann vermutlich eine Prozedur für die ganzen Buttonklicks der Zahlen und eine für die Operationen und so, und da kannst du ja je nachdem was angeklickt wurde den Inhalt des Edits ersetzen oder die neue Eingabe anhängen.
Ohne aber genauer zu sehen wie du das programmiert hast, ist es nicht so einfach da genaueres dazu zu sagen.
Moerv - Sa 11.10.08 02:42
also der quell text sieht bis jetzt so aus
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:
| unit uRechner;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;
type TForm1 = class(TForm) SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; SpeedButton4: TSpeedButton; SpeedButton5: TSpeedButton; SpeedButton6: TSpeedButton; SpeedButton7: TSpeedButton; SpeedButton8: TSpeedButton; SpeedButton9: TSpeedButton; SpeedButton0: TSpeedButton; SpeedButtonPlus: TSpeedButton; SpeedButton12: TSpeedButton; SpeedButton13: TSpeedButton; SpeedButton14: TSpeedButton; SpeedButton16: TSpeedButton; SpeedButton17: TSpeedButton; SpeedButton18: TSpeedButton; SpeedButton19: TSpeedButton; BitBtn1: TBitBtn; BitBtn2: TBitBtn; edit1: TEdit; SpeedButton15: TSpeedButton; procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure SpeedButton4Click(Sender: TObject); procedure SpeedButton5Click(Sender: TObject); procedure SpeedButton6Click(Sender: TObject); procedure SpeedButton7Click(Sender: TObject); procedure SpeedButton8Click(Sender: TObject); procedure SpeedButton9Click(Sender: TObject); procedure SpeedButton0Click(Sender: TObject); procedure SpeedButton16Click(Sender: TObject); procedure SpeedButtonPlusClick(Sender: TObject); procedure SpeedButton15Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation var Zahl: string; x, Zwischenergebnis : real; Operation: Integer; {$R *.dfm}
procedure TForm1.SpeedButton1Click(Sender: TObject); begin edit1.Text := edit1.Text + speedbutton1.caption; Zahl := edit1.Text; x := StrToFloat (Zahl); end;
procedure TForm1.SpeedButton2Click(Sender: TObject); begin edit1.Text := edit1.Text + speedbutton2.caption; Zahl := edit1.Text; x := StrToFloat (Zahl); end;
procedure TForm1.SpeedButton3Click(Sender: TObject); begin edit1.Text := edit1.Text + speedbutton3.caption; Zahl := edit1.Text; x := StrToFloat (Zahl); end;
procedure TForm1.SpeedButton4Click(Sender: TObject); begin edit1.Text := edit1.Text + speedbutton4.caption; Zahl := edit1.Text; x := StrToFloat (Zahl); end;
procedure TForm1.SpeedButton5Click(Sender: TObject); begin edit1.Text := edit1.Text + speedbutton5.caption; Zahl := edit1.Text; x := StrToFloat (Zahl); end;
procedure TForm1.SpeedButton6Click(Sender: TObject); begin edit1.Text := edit1.Text + speedbutton6.caption; Zahl := edit1.Text; x := StrToFloat (Zahl); end;
procedure TForm1.SpeedButton7Click(Sender: TObject); begin edit1.Text := edit1.Text + speedbutton7.caption; Zahl := edit1.Text; x := StrToFloat (Zahl); end;
procedure TForm1.SpeedButton8Click(Sender: TObject); begin edit1.Text := edit1.Text + speedbutton8.caption; Zahl := edit1.Text; x := StrToFloat (Zahl); end;
procedure TForm1.SpeedButton9Click(Sender: TObject); begin edit1.Text := edit1.Text + speedbutton9.caption; Zahl := edit1.Text; x := StrToFloat (Zahl); end;
procedure TForm1.SpeedButton0Click(Sender: TObject); begin edit1.Text := edit1.Text + speedbutton0.caption; Zahl := edit1.Text; x := StrToFloat (Zahl); end;
procedure TForm1.SpeedButton16Click(Sender: TObject); begin if Pos (',', edit1.Text) = 0 then begin edit1.Text := edit1.Text + Speedbutton16.caption; zahl := edit1.Text; x := StrToFloat (Zahl); end; end;
procedure TForm1.SpeedButtonPlusClick(Sender: TObject); begin if Operation = 0 then Zwischenergebnis := x; if Operation = 1 then Zwischenergebnis := Zwischenergebnis + x; if Operation = 2 then Zwischenergebnis := Zwischenergebnis - x; if Operation = 3 then Zwischenergebnis := Zwischenergebnis * x; if Operation = 4 then begin if x <> 0 then Zwischenergebnis := Zwischenergebnis / x else ShowMessage ('Bitte keine Division durch Null!'); end; Edit1.Text := ''; x := 0; Operation := 1; end;
procedure TForm1.SpeedButton15Click(Sender: TObject); begin if Operation = 0 then Zwischenergebnis := x; if Operation = 1 then Zwischenergebnis := Zwischenergebnis + x; if Operation = 2 then Zwischenergebnis := Zwischenergebnis - x; if Operation = 3 then Zwischenergebnis := Zwischenergebnis * x; if Operation = 4 then begin if x <> 0 then Zwischenergebnis := Zwischenergebnis / x else ShowMessage ('Bitte keine Division durch Null!'); end; Operation := 0; x := Zwischenergebnis; edit1.Text := FloatToStr(Zwischenergebnis); end;
end. |
habs jetzt mal mit if anweisungen in den einzelnen speedbutton prozeduren versucht
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; |
aba so läufts auch nicht :oops:
bin noch ziemlich unbewandert mit delphi :?
jaenicke - Sa 11.10.08 03:00
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; |
Moerv - Sa 11.10.08 14:34
da muss ich mich jetzt ersma durcharbeiten, aber denke so werd ichs hinkriegen :)
vielen dank schonma, ich berichte dann mal obs funktioniert :D
Moerv - Mo 13.10.08 22:19
alles kla taschenrechner läuft jetzt genauso wie ichs mir vorgestellt hab :D
vielen dank nochmal für die hilfe!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!