Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Automatische ausgeben
Deliverenc - So 09.05.10 11:10
Titel: Automatische ausgeben
hi
ich glaube das die frage schon mal gestelt worden ist nur ich finde die antwort beziungsweise die frage net.
ich will ein gröseres rechen programm schreiben muss aber auch mit zwischen ergebnissen rechen die auch angezeit werden sollen. die zahlen gebe ich in ein edit felder eine und acuh die ausgabe findet in einem edit feld stadt. meine frage ist wie und wo muss ich was programiren das das ergebnis automatisch angezeigt wird ohne das ich einen button betätigen muss.
Danke für die hilfe
Gruß Deliverenc
ALF - So 09.05.10 11:34
Deliverenc hat folgendes geschrieben : |
...das das ergebnis automatisch angezeigt wird ohne das ich einen button betätigen muss. |
Hi, dies ist aber eine schlechte Idee!
Kongret, Du müsstest also vorher schon festlegen welche rechenop Du durchführen willst, gut das geht noch.
Aber jetzt, die Eingabe in den Editfelder, mh... ok, ganz ohne Mousklicks wirds wohl auch nicht gehen. Du must ja irgendwann in das nächste Eingabefeld. Egal wie Du es lösen willst, ohne Tastaturcklicks (Entertaste, Tabtaste z.B.) kommst Du nicht weit. Um also die /das Ergebnis schon anzuzeigen während du noch die Eingaben machst....., lass es! der Aufwand ist viel zu gross! Zu mal Du schon Ergebnisse oder schlimmer, Fehler bekommst, die Du ja auch noch bearbeiten musst!
Also, ohne Tastur-/ Mouseklicks Ergebnisse zu bekommen,
nur durch die Eingabe der Zahlen in die Editfelder ne, einfach nur schlecht!
kleines Beispiel: Editfeld1:=5, Op= /, Editfeld2:=0,2.
Was passiert jetzt, so wie Du es machen willst, wenn Du im EditFeld2 die 0 eingibst!
Gruss Alf
jaenicke - So 09.05.10 11:57
Geht aber relativ einfach:
Alle OnChange-Ereignisse auf eine Methode setzen, dort dann mit TryStrToInt / TryStrToFloat die Umwandlung versuchen. Wenn alles gültige Zahlen sind, dann die Berechnung durchführen.
Bei möglichen Divisionen durch 0 oder so muss das natürlich abgefangen werden. Am besten direkt mit if, notfalls allgemein mit try..except. Dann kann entweder das Ergebnis oder ungültig oder so angezeigt werden.
Je nach Anwendungszweck macht das durchaus Sinn und spart viel Zeit, wenn man z.B. Parameter ausprobieren möchte.
ALF - So 09.05.10 12:12
jaenicke hat folgendes geschrieben : |
Bei möglichen Divisionen durch 0 oder so muss das natürlich abgefangen werden. Am besten direkt mit if, notfalls allgemein mit try..except. Dann kann entweder das Ergebnis oder ungültig oder so angezeigt werden. |
wird aber nervend bei editfeld2:= 0,000x z.B. :wink: immer diese Fehlermeldung, warten bis sie weg geht oder selber wegklicken :?
jaenicke hat folgendes geschrieben : |
Je nach Anwendungszweck macht das durchaus Sinn und spart viel Zeit, wenn man z.B. Parameter ausprobieren möchte. |
Bin voll auf Deiner Seite :wink:
Gruss Alf
jaenicke - So 09.05.10 12:17
ALF hat folgendes geschrieben : |
wird aber nervend bei editfeld2:= 0,000x z.B. :wink: immer diese Fehlermeldung, warten bis sie weg geht oder selber wegklicken :? |
Bei Gleitkommazahlen muss man natürlich mit IsZero prüfen nicht ob es exakt gleich 0 ist. ;-)
Und alle anderen Fehler kann man ja auch mit try..except abfangen.
Die Anzeige meinte ich natürlich im Ergebnisfeld und nicht als MessageBox.
ALF - So 09.05.10 12:56
Deliverenc hat folgendes geschrieben : |
ich will ein gröseres rechen programm schreiben muss aber auch mit zwischen ergebnissen rechen die auch angezeit werden sollen. |
@jaenicke, meinst Du nicht, das dies sehr Aufwendig werden kann? Meist sieht man bestimmte Dinge erst, beim Coden um festzustellen, oops- so geht das nicht, hier muss ja auch noch was
abgefangen werden damit die Funktion(Formel) und und und, mir nicht das Prog durcheinander bringt.
Ich gehe mal davon aus, das da auch jedemenge Formeln mit drin sein werden, also nicht einfach nur ein einfacher Taschenrechner, und das ganze ohne ein auszuführenden Button.
Ich weis, das man dies machen kann, aber zutrauen/umsetzen mh.... :gruebel:
Gruss Alf
jaenicke - So 09.05.10 13:05
Nun, im Grunde kann man es sich einfach machen und einfach für jedes Zwischenergebnis nen try..except Block nehmen. Wenn eine Exception auftritt, darf natürlich auch nicht weitergerechnet werden.
Aber das Schema ist im Grunde einfach:
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:
| try a := ... EditA.Text := a; except EditA.Text := 'ungültig'; FailedA := True; end;
try b := ... EditB.Text := b; except EditB.Text := 'ungültig'; FailedB := True; end;
Failed := FailedA or FailedB;
try if Failed then raise EAlreadyFailedException.Create(); ab := ... EditAB.Text := ab; except EditAB.Text := 'ungültig'; Failed := True; end;
... |
Das lässt sich sicher auch optimaler lösen, je nach Berechnung, aber so geht es recht allgemein zu lösen. Und es werden alle möglichen Zwischenergebnisse berechnet und alle Ergebnisfelder aktualisiert.
Theoretisch gehen natürlich auch verschachtelte try..except Blöcke, aber bei einer komplexen Rechnung kommt man dann schnell durcheinander, da ist der sequentielle Weg vermutlich sinnvoller.
ffgorcky - So 09.05.10 17:49
Also ich denke mal, dass Du nicht immer zwischendurch die Maus in die Hand nehmen möchtest.
Dafür gibt es dann ja bei den Buttons die Eigenschaft Default:=True, so dass Du nur einmal Enter/Return drücken brauchst.
- Oder habe ich Dich jetzt falsch verstanden? - sonst müsstest Du ja genau festlegen, wann die Eingabe denn die richtige Länge hat.
jaenicke - So 09.05.10 18:32
ffgorcky hat folgendes geschrieben : |
sonst müsstest Du ja genau festlegen, wann die Eingabe denn die richtige Länge hat. |
Nein, die Berechnung muss nur versuchen zu berechnen und wenn es nicht klappt gibt es eben kein anzeigbares Ergebnis. ;-)
Wenn dann die Eingabe fertig ist, siehst du auch direkt das Ergebnis.
Das Prinzip verwende ich z.B. sehr oft bei Suchfiltern, genau wie es Windows selbst ja (ab Vista) auch tut.
Deliverenc - So 09.05.10 18:42
ich bedanke mich für die antworten das das komplizirter ist wie ich es mir gedacht habe, habe ich schon vermutet. sgat mir aber doch wie ich z.B. eine automatischergebnis anzeige hinbekomme wenn dir rechnung 2+2 beträgt ohne das ich irgend was drücken muss.
jaenicke - So 09.05.10 19:05
Wie gesagt: OnChange aller Edits auf die selbe Methode legen, fertig.
Du probierst es irgendwie gar nicht aus, fällt mir da so auf...
Na gut, weils ne Sache von 2 Minuten ist, Demo im Anhang...
Deliverenc - So 09.05.10 19:15
ich weis ich habe eben erst nach gelesen da ich weg wahr und da stante ich auch kurz auf dem schlauch und wuste net wie ich grade anfangen sollte.
danke für die demo
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!