Entwickler-Ecke
Sonstiges (Delphi) - if statements
death-adders - Di 16.05.06 15:35
Titel: if statements
hi!
also ich habe in meinem projekt 5 edit felder und muss prüfen, in welchem kein wert steht und in welchem ein wirt drinne ist. aber mein pc mag das nicth so recht!
Delphi-Quelltext
1: 2: 3: 4: 5:
| If edtY.text = '' and edtX.text <> 1 and edtA.text <> 1 and edtB.Text <> 1 and edtC.text <> then ereignis |
edtX, edta, edtB und edtC sind alles edtfelder. aber er gibt ne fehlermeldung von wegen inkompatible types
kann mir jemand gelfen?
azubi_20 - Di 16.05.06 15:41
Delphi-Quelltext
1: 2: 3: 4: 5:
| If edtY.text = '' and edtX.text <> '1' and edtA.text <> '1' and edtB.Text <> '1' and edtC.text <> 'x' then ereignis |
der Berliner - Di 16.05.06 15:41
Titel: Re: if statements
death-adders hat folgendes geschrieben: |
hi!
also ich habe in meinem projekt 5 edit felder und muss prüfen, in welchem kein wert steht und in welchem ein wirt drinne ist. aber mein pc mag das nicth so recht!
Delphi-Quelltext 1: 2: 3: 4: 5:
| If (edtY.text = '') and (edtX.text <> intToStr(1)) and (edtA.text <> intToStr(1)) and (edtB.Text <> intToStr(1)) and (edtC.text <> )then ereignis |
|
So sollte es klappen.
Gruß
starsurfer - Di 16.05.06 15:47
der Berliner hat folgendes geschrieben: |
death-adders hat folgendes geschrieben: | hi!
also ich habe in meinem projekt 5 edit felder und muss prüfen, in welchem kein wert steht und in welchem ein wirt drinne ist. aber mein pc mag das nicth so recht!
Delphi-Quelltext 1: 2: 3: 4: 5:
| If (edtY.text = '') and (edtX.text <> intToStr(1)) and edtA.text <> intToStr(1)) and edtB.Text <> intToStr(1)) and (edtC.text <> )then ereignis |
|
So sollte es klappen.
Gruß |
1. inttostr(1) isses gleiche wie '1' //das abfragen ist aber ungünstig, wenn 2 drinne steht macht er Mist
2. wenn man mehrere Bedingungen hat, müssen diese in Klammern(und wirklich alle!) :mahn:
zur Frage:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if edit1.text='' then begin end else begin end; |
death-adders - Di 16.05.06 15:51
azubi_20 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5:
| If edtY.text = '' and edtX.text <> '1' and edtA.text <> '1' and edtB.Text <> '1' and edtC.text <> 'x' then ereignis | |
das geht nicht, da sagt der: "operator not applicable to this operand type"
der Berliner hat folgendes geschrieben: |
death-adders hat folgendes geschrieben: | hi!
also ich habe in meinem projekt 5 edit felder und muss prüfen, in welchem kein wert steht und in welchem ein wirt drinne ist. aber mein pc mag das nicth so recht!
Delphi-Quelltext 1: 2: 3: 4: 5:
| If (edtY.text = '') and (edtX.text <> intToStr(1)) and (edtA.text <> intToStr(1)) and (edtB.Text <> intToStr(1)) and (edtC.text <> intToStr)then ereignis |
|
So sollte es klappen.
Gruß |
und das geht auch nicht, da sagt der: " Incompatible types: 'string' and 'boolean'
'then'expected but ')' found"
azubi_20 - Di 16.05.06 15:52
So, um noch mal zusammenfassend alles richtig zu machen :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| If (edtY.text = '') and (edtX.text <> '1') and (edtA.text <> '1') and (edtB.Text <> '1') and (edtC.text <> 'x') then ereignis |
Stoney - Di 16.05.06 15:55
Titel: Re: if statements
Probier's mal so:
(Alle Lösungen miteinander vermischt und noch ne Klammer drum rum :) )
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| If ((edtY.text = '') and (edtX.text <> '1') and (edtA.text <> '1') and (edtB.Text <> '1') and (edtC.text <> 'x')) then ereignis |
death-adders - Di 16.05.06 15:57
azubi_20 hat folgendes geschrieben: |
So, um noch mal zusammenfassend alles richtig zu machen :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| If (edtY.text = '') and (edtX.text <> '1') and (edtA.text <> '1') and (edtB.Text <> '1') and (edtC.text <> 'x') then ereignis | |
jo danke, das geht! gibt nur noch einen haken, wenn nu z.B. bei editX nichts, also gar nichts drin steht, dann gibt es ne fehlermeldung, aber ich wollte, das dann halt garnichts passiert, weil die bedingung j anicht erfüllt wurde!
danke für die suuuper schnelle hilfe!
azubi_20 - Di 16.05.06 16:01
death-adders hat folgendes geschrieben: |
jo danke, das geht! gibt nur noch einen haken, wenn nu z.B. bei editX nichts, also gar nichts drin steht, dann gibt es ne fehlermeldung, aber ich wollte, das dann halt garnichts passiert, weil die bedingung j anicht erfüllt wurde!
|
Bei welcher Aktion gibt es was für ne Fehlermeldung ???
death-adders - Di 16.05.06 16:09
azubi_20 hat folgendes geschrieben: |
death-adders hat folgendes geschrieben: |
jo danke, das geht! gibt nur noch einen haken, wenn nu z.B. bei editX nichts, also gar nichts drin steht, dann gibt es ne fehlermeldung, aber ich wollte, das dann halt garnichts passiert, weil die bedingung j anicht erfüllt wurde!
|
Bei welcher Aktion gibt es was für ne Fehlermeldung ??? |
ich habe das prog gestartet ind EdtX alles gelöscht, auf den button gedrückt, dann sollte ja eigentlich nsicht passieren aber statt dessen kommt ein richtiges fenster in dem steht Project Project1.exe raised exception class EConvertError with message""is not a valid floating point value'. Process stopped. Use Step or Ru n to continue.
Born-to-Frag - Di 16.05.06 16:13
Zeig mal mehr code.. dann rufst du warscheinlich irgendwo StrToInt('') auf.
greetz
death-adders - Di 16.05.06 16:14
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.BtnRechneClick(Sender: TObject); begin
If (edtY.text = '') and (edtX.text <> '1') and (edtA.text <> '1') and (edtB.Text <> '1') and (edtC.text <> '1') then application.Terminate; end; |
azubi_20 - Di 16.05.06 16:20
da kann dieser Fehler gar nicht auftreten...
An welcher stelle hält dein Programm an ?
Vielleicht postest du auch mal deinen ganzen Quelltext, wenns nicht zuviel ist.
death-adders - Di 16.05.06 16:23
rofl lol jetz gehts!?!
kp warum!!!
baer vielen dank für die hilfe!!
azubi_20 - Di 16.05.06 16:27
Noch ne kleine Sache : willst du wirklich dein gesamtes Programm beenden, oder nur aus der Prozedur aussteigen ?
Delphi-Quelltext
1: 2: 3:
| application.terminate; exit; |
ZeitGeist87 - Di 16.05.06 16:27
das einfachste bei sowas ist ne case-struktur...
naja warum einfach wenns auch kompliziert geht...
death-adders - Di 16.05.06 18:44
ne, den befehl habe ich nur benutzt, um zu gucken, ob es geht, weil wenn es geht, mussich das prog sowieso beenden.
death-adders - Di 16.05.06 19:16
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.BtnRechneClick(Sender: TObject); var y, x, a, b, c :real; begin
If (edtY.text = '') and (edtX.text <> '1') and (edtA.text <> '1') and (edtB.Text <> '1') and (edtC.text <> '1') then begin (X:=strtofloat(edtX.text)) and (A:=strtofloat(edtA.text)) and (B:=strtofloat(edtB.Text)) and (C:=strtofloat(edtC.Text)); end; end; |
so, und warum geht das denn dann nicht?????
Born-to-Frag - Di 16.05.06 19:18
:shock: :shock: :shock:
Also darauf wirst du wohl auch noch selbst kommen..
Seit wann trennst du Anweisungen mit AND?!?
death-adders - Di 16.05.06 19:23
ditsch! thx
ZeitGeist87 - Mi 17.05.06 07:17
Rein interessenhalber: Muss in dem Edit immer nur der Wert '1' stehen?
death-adders - 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 - 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 |
Xion - 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; |
ZeitGeist87 - 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..
death-adders - 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 - 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 - 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!
death-adders - Mi 17.05.06 15:20
ne, das geht nicht, weil wenn man keinen wert eingibt, dann soll er diesen ja berechnen
ZeitGeist87 - 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..
death-adders - 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 - 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; |
death-adders - 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! :-D
ZeitGeist87 - 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..
azubi_20 - 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 :
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:
| 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 - 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 - 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 =)
death-adders - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!