Entwickler-Ecke

Sonstiges (Delphi) - Komma im Taschenrechner angezeigt lassen?


tHeRiAn - Do 16.10.03 17:35
Titel: Komma im Taschenrechner angezeigt lassen?
Hallo erstmal,

bin ein neueinsteiger in Delphi und hab mich an einen Taschenrechner gewagt.

Jetzt hab ich das Prob, dass ein Komma im Editfeld nicht mehr mit angezeigt wird, trotz vorherigem anzeige.
Ich zeig euch einfach mal den Quellcode:

procedure TForm1.btn_kommaClick(Sender: TObject);
var a : double;

begin
a:=strtofloat(edit1.text)+(',');
edit1.text:=floattostr(a);
end;

ich denk doch mal, das Prob liegt in der umwandlung in eine Float, weiss aber nicht wie ich´s anders angehen soll.

Danke euch schon mal im vorraus.

mfg therian :lol:


Raphael O. - Do 16.10.03 17:39
Titel: Re: Komma im Taschenrechner angezeigt lassen?
falls ich dich richtig verstanden habe sollte auch das hier reichen ;)

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.btn_kommaClick(Sender: TObject);
begin
edit1.text:=edit1.text+',';
end;


tHeRiAn - Do 16.10.03 18:58

hm, wäre schon ausreichend. mein fehler, hab noch was vergessen.

Da ich die Zifferneingabe im Textfeld in eine double abspeichere wird denk ich mal das ',' nicht mit berücksichtigt.

hier der quellcode für die Zifferneingabe:

procedure TForm1.Button0Click(Sender: TObject);
begin
if (edit1.text='') then edit1.text:='0';
a:=strtofloat(edit1.text) * 10 + 0;
edit1.text:=floattostr(a);
end;


Das Komma wird zwar einmal mit angezeigt, doch es wird bei einer Zifferneigabe im Editfeld nicht mehr mit angezeigt.


Raphael O. - Do 16.10.03 19:05

ich weiß nicth genau, was du willst :?
die Anzeige ist eigentlich noch garkein problem...
bei "0-Button" kannst du folgenden Quellcode nehmen:

Delphi-Quelltext
1:
if not edit1.text="0" then edit1.text:=edit1.text+'0';                    


tHeRiAn - Do 16.10.03 19:14

Ohje, ich seh schon, meine Gabe zu erklären ist wohl doch eher beschränkt.

Ich zeig euch wohl doch besser mal meinen kompletten Quellcode.


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:
var
  Form1: TForm1;
  a, ergebnis, zahl1, zahl2: double;
  aktion: integer;

   implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (edit1.text=''then edit1.Text:='0';
  a:= strtofloat(edit1.text)*10 + 1;
  edit1.Text:=floattostr(a);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if (edit1.text=''then edit1.Text:='0';
  edit1.Text:=floattostr(strtofloat(edit1.text)*10 + 2);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if (edit1.text=''then edit1.text:='0';
  a:=strtofloat(edit1.text)* 10 + 3;
  edit1.Text:=floattostr(a);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  if (edit1.text)='' then edit1.text:='0';
  a:=strtofloat(edit1.text)* 10 + 4;
  edit1.Text:=floattostr(a);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
if (edit1.text=''then edit1.text:='0';

a:=strtofloat(edit1.text) *10 + 5;
edit1.text:=floattostr(a)
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
if (edit1.text=''then edit1.text:='0';
a:=strtofloat(edit1.Text)* 10 + 6;
edit1.text:=floattostr(a);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
if (edit1.text=''then edit1.text:='0';
a:=strtofloat(edit1.text) * 10 + 7;
edit1.text:=floattostr(a);
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
if (edit1.text=''then edit1.text:='0';
a:=strtofloat(edit1.text) * 10 + 8;
edit1.text:=floattostr(a);
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
if (edit1.Text=''then edit1.text:='0';
a:=strtofloat(edit1.text) *10 + 9;
edit1.text:=floattostr(a);
end;

procedure TForm1.Button0Click(Sender: TObject);
begin
if (edit1.text=''then edit1.text:='0';
a:=strtofloat(edit1.text) * 10 + 0;
edit1.text:=floattostr(a);
end;

procedure TForm1.btn_kommaClick(Sender: TObject);
begin
//a:=strtofloat(edit1.text)+(',');
edit1.text:=edit1.text +',';
end;










procedure TForm1.FormActivate(Sender: TObject);
begin
edit1.text:='0';
end;









procedure TForm1.aditionbtnClick(Sender: TObject);
begin
zahl2:=zahl1;
zahl1:=strtofloat(edit1.Text);
edit1.Text:='';
aktion:=1;
end;


procedure TForm1.subtraktionbtnClick(Sender: TObject);
begin
zahl2:=zahl1;
zahl1:=strtofloat(edit1.Text);
edit1.text:='';
aktion:=2;
end;


procedure TForm1.multiplikationbtnClick(Sender: TObject);
begin
zahl2:=zahl1;
zahl1:=strtofloat(edit1.text);
edit1.text:='';
aktion:=3;
end;

procedure TForm1.divisionbtnClick(Sender: TObject);
begin
zahl2:=zahl1;
zahl1:=strtofloat(edit1.text);
edit1.text:='';
aktion:=4;
end;







procedure TForm1.gleichbtnClick(Sender: TObject);
begin
   if (aktion=1then zahl2:=strtofloat(edit1.Text);
   if (aktion=1then ergebnis:=zahl1+zahl2;

   if (aktion=2then zahl2:=strtofloat(edit1.Text);
   if (aktion=2then  ergebnis:=zahl1-zahl2;

   if (aktion=3then zahl2:=strtofloat(edit1.text);
   if (aktion=3then ergebnis:=zahl1*zahl2;

   if (aktion=4)  then zahl2:=strtofloat(edit1.text)else;
       if(zahl2=0then showmessage('Parameter nicht erlaubt') ;
   if (aktion=4then ergebnis:=zahl1/zahl2;


  edit1.text:=floattostr(ergebnis);

end;



procedure TForm1.clearbtnClick(Sender: TObject);
begin
  a:=0;

  ergebnis:=0;
  edit1.text:='0';


  end;

end.
[/delphi]


maze2k - Do 16.10.03 19:23

Hmm, also erstmal denk ich das "+0" kannst du dir schenken *lol*


Delphi-Quelltext
1:
2:
3:
4:
if (edit1.text=''then edit1.text:='0'
a:=strtofloat(edit1.text) * 10
edit1.text:=floattostr(a) + ','
end;


so sollte das doch gehn oder?

Aber so hast du das Komma nur am Ende...

Ich würd da mit TStringList arbeiten, dann kannst das Komma auch in der Mitte rausholen...

Beispiel-Prozedur:

Du willst zwei Zahlen Addieren....
Zwei Edits, ein + Button:


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:
procedure TForm1.Button1Click(Sender: TObject);
var
  z : TStringList;
  n1,n2,n: Integer;  // Nachkommastellen
  t1,t2: String;   // Temporärvariablen
begin
  z := TStringList.Create;
  z.Delimiter := ',';
  z.DelimitedText := edit1.Text;
  n1 := Length(z[1]);
  t1 := z[0] + z[1];
  z.Free;

  z := TStringList.Create;
  z.Delimiter := ',';
  z.DelimitedText := edit2.Text;
  n2 := Length(z[1]);
  t2 := z[0] + z[1];
  z.Free;

  if (n1 > n2) then
    n := n1
  else n := n2;
  edit3.Text := FloatToStr((StrToInt(t1) + StrToInt(t2)) / power(10,n) );
end;


Math einbinden nicht vergessen bei den Uses...

Aber vielleicht wär's tausend mal einfach wenn du das Komma einfach durch nen Punkt ersetzt? *g*
Damit kann Float nämlich umgehen...

Aber ich hab die Prozedur trotzdem mal geschrieben... warum auch nich *lol* hab ja sonst nix zu tun


Raphael O. - Do 16.10.03 20:09

man kanns aber auch im Edit mit nem komma anzeigen, dann aber mittels strreplace immer für die Berechnung das Komma in einen Punkt ändern...


maze2k - Do 16.10.03 20:15

Ja das meinte ich ja....


tHeRiAn - Fr 17.10.03 09:38

Hui, jetzt habt ihrs geschafft mich entgültig zu verwirren. aber trotzdem vielen Dank. :-)

@maze2k: ich verwende nur ein edit für Ein- und Ausgabe der Werte. Deine Code sieht zwar gut aus aber noch zu viel für mich.

ich versuchs mal mit strreplace, mal schaun was rauskommt.......

:?