Autor |
Beitrag |
killerbiene
Hält's aus hier
Beiträge: 5
|
Verfasst: So 04.02.07 18:53
Hi
Ich benutze in der Schule Delphi und habe schonmal vorgearbeitet...
Angefangen habe ich mit dem wohl standart , dem rechtecksberechnungprogramm!
Code ist dieser hier:
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TRayen = class(TForm) Panel1: TPanel; SeiteBEdit: TEdit; SeiteAEdit: TEdit; FlaecheEdit: TEdit; UmfangEdit: TEdit; DiagonaleEdit: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; RechnenButton: TButton; ResetButton: TButton; EndeButton: TButton; Label11: TLabel; procedure EndeButtonClick(Sender: TObject); procedure RechnenButtonClick(Sender: TObject); procedure ResetButtonClick(Sender: TObject); private public end;
var Rayen: TRayen; SeiteA,SeiteB,Flaeche,Umfang,Diagonale : Real;
implementation
{$R *.dfm}
procedure TRayen.EndeButtonClick(Sender: TObject); begin close; end;
procedure TRayen.RechnenButtonClick(Sender: TObject); begin SeiteA:=StrToFloat(SeiteAEdit.Text); SeiteB:=StrToFloat(SeiteBEdit.Text); Flaeche:=SeiteA*SeiteB; Umfang:=2*(seiteA+SeiteB); Diagonale:=Sqrt(SeiteA*2+SeiteB*2); FlaecheEdit.Text:=FloatToStr(Flaeche); UmfangEdit.Text:=FloatToStr(Umfang); DiagonaleEdit.Text:=FloatToStr(Diagonale); end;
procedure TRayen.ResetButtonClick(Sender: TObject); begin SeiteAEdit.Text:=''; SeiteBEdit.Text:=''; FlaecheEdit.Text:=''; UmfangEdit.Text:=''; DiagonaleEdit.Text:=''; end;
end. |
Nun habe ich aber wie ihr sicher erahnen könnt einen Fehler , wenn ich nichts in die Felder A und B eingebe , also wenn die leer bleiben!Was muss ich machen , damit Anstelle eines Fehlers einfach alles mit Nullern gefüllt wird?!
mfg Killerbiene
Moderiert von Gausi: Code- durch Delphi-Tags ersetzt
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 04.02.07 19:20
kommt auf deine delphi version an. normal prüft man zuvor, ob das feld leer ist und falls ja, setzt man 0 ansonsten wandelt man den wert um. alternativ kannst du es auch mit einen try ... except ... end block schützen oder in 'ner neueren version via tryStrToFloat. HTH
PS: kommt halt auch drauf an, ob du 'ne quick und dirty lösung für die schule brauchst, wo die ansprüche nicht so hoch sind, oder ob das professionell gemacht werden soll. beim zweiten wäre der aufwand auch um einiges grösser, was z.b. in einer klausur nicht zu machen wäre.
PPS: deine globalen variablen, solltest du in die klasse verlagern. dort gehören sie auch hin.
|
|
Robinator
      
Beiträge: 275
WinXP
BDS 2006
|
Verfasst: So 04.02.07 19:23
Hallo,
Dafür gibt es StrToFloatDef und StrToIntDef. Sollte genau das sein, was du suchst.
gruss, Rob
_________________ erare humanum est
|
|
killerbiene 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 04.02.07 19:28
Also ich benutze Delphi 7 und auch 5!
Ich brauche natürlich eine Einsteigerfreundliche Lösung und eine die für die Schule geeignet ist , jedoch auch eine , die beim Dbugger keinen Fehler auslöst!
Geht das mit dem StrToFloatDef odernicht? Falls ja , wo soll ich das einbauen?!
danke für euer Gedult , bin halt absoluter noob!
|
|
Robinator
      
Beiträge: 275
WinXP
BDS 2006
|
Verfasst: So 04.02.07 19:37
Hallo,
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TRayen.RechnenButtonClick(Sender: TObject); begin SeiteA:=StrToFloatDef(SeiteAEdit.Text, 0); SeiteB:=StrToFloatDef(SeiteBEdit.Text, 0); Flaeche:=SeiteA*SeiteB; Umfang:=2*(seiteA+SeiteB); Diagonale:=Sqrt(SeiteA*2+SeiteB*2); FlaecheEdit.Text:=FloatToStr(Flaeche); UmfangEdit.Text:=FloatToStr(Umfang); DiagonaleEdit.Text:=FloatToStr(Diagonale); end; |
Und evtl einfach mal auf StrToFloatDef klicken und dann F1 drücken
Gruss, Rob
_________________ erare humanum est
|
|
killerbiene 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 04.02.07 19:42
Genial , danke , hat funktioniert! Vielen Dank!
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 04.02.07 19:43
also bei D5 gibts die trystrtofloat noch nicht, ebenso wie die strtofloatdef. dir wird da nix anderes übrigbleiben als den folgenden weg zu gehen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| try SeiteA:=StrToFloat(SeiteAEdit.Text); except seitea := 0; end; try SeiteB:=StrToFloat(SeiteBEdit.Text); except seiteb := 0; end; |
sollt man zwar nicht machen, aber für die schule vollkommen ausreichend. HTH.
|
|
MSC
      
Beiträge: 63
Win XP Home, Win Vista Buisiness
Delphi 7 Enterprise
|
Verfasst: So 04.02.07 19:54
Wenn du einfach nur testen willst, ob die Eingaben leer sind, kannst du das verwenden
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TRayen.RechnenButtonClick(Sender: TObject); begin if SeiteAEdit.Text = '' then exit else SeiteA:=StrToFloat(SeiteAEdit.Text); if SeiteBEdit.Text = '' then exit else SeiteB:=StrToFloat(SeiteBEdit.Text); Flaeche:=SeiteA*SeiteB; Umfang:=2*(seiteA+SeiteB); Diagonale:=Sqrt(SeiteA*2+SeiteB*2); FlaecheEdit.Text:=FloatToStr(Flaeche); UmfangEdit.Text:=FloatToStr(Umfang); DiagonaleEdit.Text:=FloatToStr(Diagonale); end; |
Ansonsten kannst du auch direkt abtesten, ob nur Zahlen und Bauchstaben verwendet wurden:
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:
| procedure TRayen.RechnenButtonClick(Sender: TObject); var ok:boolean; begin ok:=True; if SeiteAEdit.Text <> '' then begin for i:=1 to length(SeiteAEdit.Text) do if SeiteAEdit.Text[i] in ['0'..'9',','] then else ok:=false
if SeiteAEdit.Text <> '' then for i:=1 to length(SeiteBEdit.Text) do if SeiteBEdit.Text[i] in ['0'..'9',','] then else ok:=false
if ok=true then begin SeiteA:=StrToFloat(SeiteAEdit.Text); SeiteB:=StrToFloat(SeiteBEdit.Text); Flaeche:=SeiteA*SeiteB; Umfang:=2*(seiteA+SeiteB); Diagonale:=Sqrt(SeiteA*2+SeiteB*2); FlaecheEdit.Text:=FloatToStr(Flaeche); UmfangEdit.Text:=FloatToStr(Umfang); DiagonaleEdit.Text:=FloatToStr(Diagonale); end; end; end; |
Ich hoffe es funktioniert alles.
Edit: ok, in der Zeit waren 3 andere Beiträge geschrieben worden 
|
|
killerbiene 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 04.02.07 20:05
Ok , wenn das mit der 5-er nicht geht ist es schlecht....
Nunja....also das mit Try except funktioniert zwar in der exe , jedoch löst es im debugger Fehler aus! Gibt es eine leichte andre Möglichkeit , ohne das der Debugger ausschlägt? oder ist das , dass was man im normalfall als Schüler nimmt?
Edit: Die erste Methode des letzten Beitrags probier ich mal!
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 04.02.07 20:11
für den debugger, gibts drei möglichkeiten
a) fehler ignorieren und auf weiter drücken
b) debugger abschalten
c) except in debugger abschalten
oder einfach kompilieren und die kompilierte exe ausführen 
|
|
killerbiene 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 04.02.07 20:12
Überflüssig....wenn ich es einfach so mache wie MSC es sagtest , also mit if '' then.... funktioniert es sogar mit Debugger wunderbar!
Danke Leute für die Hilfe! Tolles Board!
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 04.02.07 20:20
tja, dann gib mal 'n dezimalpunkt ein, oder 'n leerzeichen oder 'n buchstaben...
dann krachts. also, diesen weg würd ich an deiner stelle nicht gehen, da er zeitaufwendig ist. aber wenns richtung professionell gehen soll, gibts hier normal keinen anderen weg. aber muss halt noch etwas ausprogrammiert werden, so dass er wirklich verhebt. IMHO
|
|