Autor |
Beitrag |
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 17.05.06 07:17
Rein interessenhalber: Muss in dem Edit immer nur der Wert '1' stehen?
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
death-adders 
      
Beiträge: 82
Vista
Turbo Delphi Explorer
|
Verfasst: Mi 17.05.06 14:22
nein, es geht nur darum zu prüfen ob eine zahl im edit steht, da ist mir auch noch aufgefallen, das 1 ja weder kleiner noch größer als ein ist, also wenn eine 1 im edit steht, dann ist ja die bedingung false, also wird alles nach dem then nicht ausgeführt. desshalb nehme ich jetzt einfach kleiner als 10000 da zahlen über 9999 eh quatsch wären.!
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 17.05.06 14:48
ähm riesenfehler!!!
so wie du prüfst, checkst du nur ob der wert im edit1 <> deinem wert ist.
tipp ich genau diesen wert ein passiert ein fehler!!!
prüf so
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| ... if length(edit1.text) > 0 then begin end else |
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 17.05.06 14:54
ja, so hast du aber die länge. wie ich das sehe gehts doch drum, ob ne zahl drinsteht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| var E1,E2,E3,E4,E5: integer; begin try E1:=strtoint(Edit1.Text); except E1:=0; end;
try E2:=strtoint(Edit2.Text); except E2:=0; end;
... if ... ...
end; |
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 17.05.06 15:01
so hab ich nicht die länge so prüf ich ob etwas im edit steht
was bis dahin drin steht ist gleich!
sobald etwas drin steht kann er da wo Verarbeitung steht prüfen ob es eine Zahl ist!!
am besten mit der Funktion VAL, diese gibt auch gleich zurück welches zeichen nicht korrekt ist also 12a4 gibt die funktion nen fehler aus und sagt das position 3 nicht korrekt ist.
so würd ichs machen ist die beste lösung meiner meinung nach wenn er nicht unbedingt alles in try-except-blöcke fassen möchte..
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
death-adders 
      
Beiträge: 82
Vista
Turbo Delphi Explorer
|
Verfasst: Mi 17.05.06 15:10
ja, das habe ich auch gemerkt desshalb habe ich dann geschrieben
Delphi-Quelltext 1: 2:
| if(edit1.text <> 1) or (edit1.text =1) ... |
aber das ging nicht und
Delphi-Quelltext 1:
| if(edit1.text > 99999999999) |
ging auch net!
aber
Delphi-Quelltext 1:
| if(edit1.text <>0,00000000000000000001) then... |
ging, da ich ja nie den wert 0,00000000000000000001 eingeben werde! 
|
|
death-adders 
      
Beiträge: 82
Vista
Turbo Delphi Explorer
|
Verfasst: Mi 17.05.06 15:13
also wegen dem try/except!
auf deutsch sozusagen:
Delphi-Quelltext 1: 2: 3: 4: 5:
| try E1:=strtoint(Edit1.Text); except E1:=0; end; |
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 17.05.06 15:16
lol!!
so prüft man aber nicht wirklich auf korrekte eingaben!
wenn jemand anders das programm nutzt und genau das eingibt auf was du ungleich prüfst hast du wieder den selben fehler wie mit prüfung auf ungleich 1 oder 999999
mach folgendes:
2 möglichkeiten
1. schreib in edit1.onKeyPress folgendes
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', DecimalSeparator, ThousandSeparator, Char(VK_BACK)]) then Key := #0; end; |
2. möglichkeit
Bei heutiger Rechnerleistung stellt es auch kein Problem mehr dar, bei jeder Eingabe den kompletten Inhalt des Feldes zu prüfen und dem Anwender beispielsweise durch Signalfarben deutlich zu machen, dass er noch keinen eindeutigen Wert angegeben hat. Hier ist das OnChange-Ereignis der richtige Ansatzpunkt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Edit1Change(Sender: TObject); var Error: Integer; Dummy: Integer; begin val(Trim(Edit1.Text), Dummy, Error); if Error<>0 then Edit1.Color:=clRed else Edit1.Color:=clWindow; end; |
so lässt du nur zahleneingaben zu!
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
death-adders 
      
Beiträge: 82
Vista
Turbo Delphi Explorer
|
Verfasst: Mi 17.05.06 15:20
ne, das geht nicht, weil wenn man keinen wert eingibt, dann soll er diesen ja berechnen
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 17.05.06 15:24
achso du meinst beispielsweise so
ich hab 3 edits
edit1 = summand1
edit2 = summand2
edit3 = summe(ergebnis)
benutzer tippt in edit1 5 ein und in edit3 15
dann klickt er aufn button und da in edit2 nix steht muss das programm edit2 berechnen (im beispiel also 10)
vom prinzip her richtig?
nur um dir dann nen korrekten ansatz geben zu können..
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
death-adders 
      
Beiträge: 82
Vista
Turbo Delphi Explorer
|
Verfasst: Mi 17.05.06 15:29
ja und wenn edit 1 leer ist aber edit 2 und 3 befüllt ist, dann soll edit 1 berechnet werden! mit einer anderen formel!
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 17.05.06 15:40
dann ist der beste weg folgender
je nach status wird eine andere formel ausgeführt (machst du am besten mit case auf den status)
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:
| procedure meineFormeln(status: integer); begin case status of 1: begin end; 2: begin end; ... end; procedure pruefeEingabe; begin if length(edit1.text) <= 0 then begin meineFormel(1); exit; end else if length(edit2.text) <= 0 then begin meineFormel(2); exit; end else if .... end; |
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
death-adders 
      
Beiträge: 82
Vista
Turbo Delphi Explorer
|
Verfasst: Mi 17.05.06 15:50
jo danke, das würde gehen, dann muss nur noch zusätzlich geprüft werden, ob in den anderen etwas drinne ist, sonst gibs ja nen fehler! ich habe nun nur schon das ganze mit mit nem langen if satz fast fertig, und das geht, dann schreibe ich dazu, das man aus technischen gründen den wert 0,0000000001 nicht eingeben soll! 
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 17.05.06 15:53
wenn du das mit den technischen gründen schreibst, versprech ich dir probierts jeder aus =)
du kannst ja dann bei der formel-berechnung prüfen, ob in den feldern, die du zur berechnung brauchst etwas steht.
wie gesagt die lösung mit 0,00000001 ist nicht sehr äquivalent..
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
azubi_20
      
Beiträge: 593
WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
|
Verfasst: Do 18.05.06 08:41
Ok, also ich hab das jetzt so verstanden, das du einmal überprüfen willst ob Zahlen eingegeben wurden und dann je nach dem welche edits belegt sind ,eine bestimmte Formel benutzen willst.
Also wegen Zahlen eingeben, würde ich nur Zahlen zulassen :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', DecimalSeparator, Char(VK_BACK)]) then Key := #0; if (Key = DecimalSeparator) AND (pos(Key, (Sender as TCustomEdit).Text) > 0) then Key := #0; end; |
Und dieses Ereignis jedem Edit im KeyPress-Ereignis zuordnen (über Objektinspektor)
Dann Eingabe überprüfen und entsprechende Formel auswählen :
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:
| procedure Rechnen; var Formel1, Formel2, Formel3, Formel4, Formel5 : boolean; begin Formel1 := (Edit2.text<>"") AND (Edit3.text<>"") AND (Edit4.text<>"") AND (Edit5.text<>""); Formel2 := (Edit1.text<>"") AND (Edit3.text<>"") AND (Edit4.text<>"") AND (Edit5.text<>""); Formel3 := (Edit1.text<>"") AND (Edit2.text<>"") AND (Edit4.text<>"") AND (Edit5.text<>""); Formel4 := (Edit1.text<>"") AND (Edit2.text<>"") AND (Edit3.text<>"") AND (Edit5.text<>""); Formel5 := (Edit1.text<>"") AND (Edit2.text<>"") AND (Edit3.text<>"") AND (Edit4.text<>"");
If Formel1 then begin Edit1.text := FloatToStr(strtofloat(Edit2) + strtofloat(Edit3) * strtofloat(Edit4) + strtofloat(Edit5)); end; If Formel2 then begin end; If Formel3 then begin end; If Formel4 then begin end; If Formel5 then begin end;
end; |
|
|
death-adders 
      
Beiträge: 82
Vista
Turbo Delphi Explorer
|
Verfasst: Do 18.05.06 16:13
Ok, also nu weiß ich, wei ich es mach!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| try
edit.text:=floattostr(meine fornmel);
except try edit2.text:=floattostr(meinezweiteformel); except try
... ... ... |
so geht es wuuunderbar!
danke an alle!
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Do 18.05.06 16:20
versteh ich ned =(
so weißt du nur das ergebnis vor..da frag ich mich was dir das bringt wenn du das in nen try except block fässt..
naja..vielleicht erklärst es mal =)
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
death-adders 
      
Beiträge: 82
Vista
Turbo Delphi Explorer
|
Verfasst: Do 18.05.06 18:18
ich habe ja 5 edit felder, wenn ich in 4 stück werte eingebe, soll er die mit formel 1 berechnen
wenn ich in andere 4 werte eingebe, soll er das mit formel 2 berechnen usw.
also dachte ich baue ich was mit try, wobei ich bei meinem letztem post was falsch verstanden hatte
ich muss also versuchen, ob variante eins (wo fie felder 1-4 befüllt sind) funktioniert, denn wenn ich mit einem leerem feld rechne, dann bekomme ich ja immer einen fehler, also, wenn er dann einen fehler bekommt, soll er dann verscuhen, ob variante zwei funtzt (wo felder 2-6) befüll sind
usw.
|
|
|