Autor Beitrag
Moerv
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 11.10.08 00:23 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
  Edit1.Text := '0';					


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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 11.10.08 02:42 
also der quell text sieht bis jetzt so aus

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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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;

user profile iconMoerv hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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:
ausblenden 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:
ausblenden 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:
ausblenden 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:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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!