Entwickler-Ecke

Sonstiges (Delphi) - fehler bei berechnung?!?


xilos - Do 30.11.06 17:26
Titel: fehler bei berechnung?!?
hi...
....und wieder zum kalorienrechner ^^
und zwar funktioniert jetzt fast alles wunderbar...außer das er komischer weiße etwas ausrechnet obwohl er das gar nicht soll ^^

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:
procedure TForm1.Button1Click(Sender: TObject);
var zahl1 : integer;
var bonus: integer;
begin

if (edit1.text='0'or  (radiogroup1.itemindex=-1then
  showmessage ('Sie haben die Angaben vergessen!!!')

else
edit2.text    := '0' ;

edit3.Text    := '0'  ;

zahl1         := StrToint (edit1.text);

edit2.text    := intToStr (zahl1*24);


  if RadioGroup1.ItemIndex = 0 then
    bonus := StrToInt(Edit2.Text)  div 3;

  if RadioGroup1.ItemIndex = 1 then
    bonus := StrToInt(Edit2.Text)  * 2 div 3;

  if RadioGroup1.ItemIndex = 2 then
    bonus := StrToInt(Edit2.Text) ;

edit3.text := inttostr((strtoint(Edit3.text)*24)+ bonus);


Label4.Caption := Format('Sie benütigen am Tag %d Kilokalorien', [StrToIntDef(Edit2.Text, 0) +
                                                                  StrToIntDef(Edit3.Text, 0) ]);

end;

end.


das ist der quelltext...
wenn ich jetzt im ersten editfeld die null drin lasse dann müsste er eigentlich nur eine fehlermeldung ausspucken...er zeigt jedoch im edtifeld 3 irgendeine zahl an von der ich keine ahnung habe wo die her kommt :S
könnt ihr mir helfen?? findet ihr vll den fehler??

thx jetzt schon mal


Moderiert von user profile iconChristian S.: Topic aus VCL (Visual Component Library) verschoben am Do 30.11.2006 um 16:53


xilos - Do 30.11.06 17:27

entschuldigung ein kleiner aber wichtiger fehler...
wenn ich die null drin eine zahl bei gewicht eingebe und keinen radiobutton anklicke kommt unten eine zahl ^^ (ich weiß immer noch nicht warum)


aim65 - Do 30.11.06 17:33

Tippe mal, daß bei Edit1.Text :='0' die zugehörige Zahl1 nicht gelöscht, d.h. explizit auf Null gesetzt wird. Also steht im Fehlerfall wahrscheinlich die zuletzt verwendete Zahl drin.

Edit: War wohl nicht der Fehler, mal wieder Schnellschuß. Ich denke mal, daß der Index in einer einmal aktivierten RadioGroup eigentlich nicht mehr -1 sein kann, da immer ein Button aktiviert ist. (Oder setzt Du das irgendwo auf -1 ?) in dem Fall wird die Fehlerroutine ja nie mehr angesprungen.


xilos - Do 30.11.06 17:35

was kann ich denn noch anstatt der 0 nehmen damit das feld immer wieder gelöscht wird und das mit der if funktion funktioniert???


aim65 - Do 30.11.06 17:44

:oops: guck mal mein Edit - war ein bißchen zu langsam...


xilos - Do 30.11.06 17:47

jaja hab ich gesehn ^^ aber ich muss das in der if funktion ja auf -1 setzen weil die fehlermeldung ja nur kommen soll, wenn kein radiobutton aus der group angewählt ist ^^ oder gibts da etwa noch ne andre möglichkeit??


F34r0fTh3D4rk - Do 30.11.06 17:49

was ist wenn in deinem edit 00 oder 00000 oder 0000000000000 steht ? was machste dann ?

mfg


xilos - Do 30.11.06 17:51

hmm dann hab ich ein prob ^^
deswegen frag ich ja x) kennt da einer ne andre lösung??


aim65 - Do 30.11.06 17:57

Also, ich kenne nur die Tatsache, daß in einer RadioGroup immer ein Button gesetzt ist. Bist Du sicher, daß Du den Index wirklich in dem Programm auf -1 gesetzt hast, bevor die Möglichkeit mit Button1.Click gegeben ist?
Ich würde einfach nach einer erfolgreichen Berechnung einen "Start"-Button oder so nehmen, der alle alten Eingaben löscht und dann erst wieder neue Eingaben erlaubt. Sonst fällt mir auf die Schnelle nix ein. Muß jetzt leider erst mal weg.


xilos - Do 30.11.06 18:16

dankeschön ich habe den itemindexx einfach auf 0 gestellt ^^
das war glaub ich die einfachste lösung..danke für den tip aim ^^


F34r0fTh3D4rk - Do 30.11.06 18:23

user profile iconxilos hat folgendes geschrieben:
hmm dann hab ich ein prob ^^
deswegen frag ich ja x) kennt da einer ne andre lösung??



Delphi-Quelltext
1:
if strtoint(edit1.text) = 0 then                    


Dragonclaw - Do 30.11.06 18:42

du hast vergessen, ein Begin NACH dem Else einzufügen, weil er soll ja alles was danach kommt nur machen wenn die Angaben vollständig sind. Einfach noch ein End; am Ende dran packen. Fertig

Hoffe ich wenigsten doch :).