Try - Funktion?
-
- Beiträge: 8
- Registriert: So 16. Okt 2011, 08:42
Try - Funktion?
Hallo,
Wie kann ich Lazarus sagen, dass es nur ausschließlich dann etwas berechnen soll, wenn in den Edit Feldern auch wirklich nur zahlen stehen? Kann ja sein, dass man sich beim eingeben vertippt - und mit Buchstaben kann Lazarus nun mal nicht umgehen, wenns um eine einfache Rechenaufgabe geht ^^
Gibts da so eine "Try - then" Funktion, die erst ein Mal prüft, ob das ganze überhaupt funktioniert? Wenn nicht, soll das Programm eben NICHT durchlaufen, sondern abbrechen und eine Infobox öffnen, in welcher zu lesen ist, man hätte sich vertippt.
Wie kann ich Lazarus sagen, dass es nur ausschließlich dann etwas berechnen soll, wenn in den Edit Feldern auch wirklich nur zahlen stehen? Kann ja sein, dass man sich beim eingeben vertippt - und mit Buchstaben kann Lazarus nun mal nicht umgehen, wenns um eine einfache Rechenaufgabe geht ^^
Gibts da so eine "Try - then" Funktion, die erst ein Mal prüft, ob das ganze überhaupt funktioniert? Wenn nicht, soll das Programm eben NICHT durchlaufen, sondern abbrechen und eine Infobox öffnen, in welcher zu lesen ist, man hätte sich vertippt.
Re: Probleme mit Edit-Feldern
1.
Das Ergebnis kannst du direkt vor der Ausgabe runden, am einfachsten mit 'RoundTo()' aus der Unit math.
Bei dem Datentyp single kommt es bei mir zu seltsamen Rundungs-Ergebnissen. Bei double scheint es zu stimmen.
2.
Das Leeren der Felder löst Edit1.Change aus. Dort versucht dein Programm einen leeren String in eine Zahl zu wandeln. Du könntest das komplett raus lassen, vom Ablauf her macht es keinen Sinn (Du hast ja sowieso ein Button zum Starten der Berechnung, dort kannst du auch sämtliche Werte einlesen). Oder du überprüfst den String und entscheidest entsprechend.
Das Ergebnis kannst du direkt vor der Ausgabe runden, am einfachsten mit 'RoundTo()' aus der Unit math.
Bei dem Datentyp single kommt es bei mir zu seltsamen Rundungs-Ergebnissen. Bei double scheint es zu stimmen.
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
// d: double!
d := ((b/100)*a)*c;
d := RoundTo(d,-2) //2 digits
Label4.Caption := (floattostr(d));
end;
Das Leeren der Felder löst Edit1.Change aus. Dort versucht dein Programm einen leeren String in eine Zahl zu wandeln. Du könntest das komplett raus lassen, vom Ablauf her macht es keinen Sinn (Du hast ja sowieso ein Button zum Starten der Berechnung, dort kannst du auch sämtliche Werte einlesen). Oder du überprüfst den String und entscheidest entsprechend.
Re: Try - Funktion?
Wo ist denn deine zuerst gestellte Frage hin?
Es gibt try..except Blöcke zum Abfangen von Fehlern. Allerdings schlage ich vor, direkt bei der Eingabe zu prüfen. Wie wär's mit FloatSpinEdit-Feldern?
Es gibt try..except Blöcke zum Abfangen von Fehlern. Allerdings schlage ich vor, direkt bei der Eingabe zu prüfen. Wie wär's mit FloatSpinEdit-Feldern?
Zuletzt geändert von Jochen am Mi 4. Jan 2012, 14:06, insgesamt 1-mal geändert.
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: Try - Funktion?
Ist wohl "nachbearbeitet".
Ich hatte mich auch schon gewundert.....
Ich hatte mich auch schon gewundert.....
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
-
- Beiträge: 6
- Registriert: Mi 4. Jan 2012, 14:45
- OS, Lazarus, FPC: Win7 (Lazarus 0.9.30.2 FPC 2.4.4)
- CPU-Target: 32Bit
Re: Try - Funktion?
Hi AlohaBanane,
bin zwar auch Anfänger was FP anbelangt, da Jahrelang nur VBA programmiert, aber ich würde das schon bei der Eingabe 'KeyPress' prüfen ob Zahlenwerte eingegeben werden. Z.B. bei Integer würde ich das so machen...
bin zwar auch Anfänger was FP anbelangt, da Jahrelang nur VBA programmiert, aber ich würde das schon bei der Eingabe 'KeyPress' prüfen ob Zahlenwerte eingegeben werden. Z.B. bei Integer würde ich das so machen...
Code: Alles auswählen
begin
if length(edit1.Text) >= 1 then
if not (Key in ['0'..'9', #8, #9]) then
Key := #0
else
if not (Key in ['0'..'9', #8, #9, '-']) then
Key := #0;
inherited KeyPress(Key);
end;
Bis dahin
Olli
Olli
-
- Beiträge: 340
- Registriert: Di 12. Sep 2006, 08:57
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten:
Re: Try - Funktion?
Was soll das alles? Es gibt ein TFolatEdit bei Lazarus, der nur Zahlen zulässt. Ebenso kann man Eingabe-Restriktionen im Normalen Edit-Feld setzen.
Der FloatEdit hat den Vorteil, dass man direkt ein Property Value hat, mit dem man rechnen kann.
Der FloatEdit hat den Vorteil, dass man direkt ein Property Value hat, mit dem man rechnen kann.
Grüße, Antrepolit
care only if your os is really burning
care only if your os is really burning
-
- Beiträge: 6
- Registriert: Mi 4. Jan 2012, 14:45
- OS, Lazarus, FPC: Win7 (Lazarus 0.9.30.2 FPC 2.4.4)
- CPU-Target: 32Bit
Re: Try - Funktion?
Hallo Antrepolit,
wo finde ich denn dieses TFloatEdit, muß ich dazu noch ein extra Paket installieren?
Ich habe mir für diese Felder letztens extra das Paket "JUJIBOUTILS" installiert.
wo finde ich denn dieses TFloatEdit, muß ich dazu noch ein extra Paket installieren?
Ich habe mir für diese Felder letztens extra das Paket "JUJIBOUTILS" installiert.
Bis dahin
Olli
Olli
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2805
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Try - Funktion?
Kann man durchaus machen, dann aber so:Olli hat geschrieben:aber ich würde das schon bei der Eingabe 'KeyPress' prüfen
Code: Alles auswählen
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
if not ((TEdit(Sender).CaretPos.X = 0) and (Key = '-')) then
if not (Key in ['0'..'9', #8, #9, #37, #39]) then
Key := #0;
end;
Dann kann man das Minuszeichen auch nachträglich noch an die erste Position setzen. Und deinen inherited-Aufruf versteh ich auch nicht so richtig.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Try - Funktion?
Du kannst einen try ... except Block um StrToInt herum machen oder die Funktion TryStrToInt benutzen.
-Michael
-Michael
-
- Beiträge: 6
- Registriert: Mi 4. Jan 2012, 14:45
- OS, Lazarus, FPC: Win7 (Lazarus 0.9.30.2 FPC 2.4.4)
- CPU-Target: 32Bit
Re: Try - Funktion?
äh ja, geht natürlich so noch besser deine Lösung. Wie gesagt, als neu Pascaljaner gibbet es noch einiges zu lernenm.fuchs hat geschrieben: Kann man durchaus machen, dann aber so:Die Prüfroutine bei Bedarf natürlich um weitere Werte ergänzen.Code: Alles auswählen
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char); begin if not ((TEdit(Sender).CaretPos.X = 0) and (Key = '-')) then if not (Key in ['0'..'9', #8, #9, #37, #39]) then Key := #0; end;
Dann kann man das Minuszeichen auch nachträglich noch an die erste Position setzen. Und deinen inherited-Aufruf versteh ich auch nicht so richtig.

Achso, kannst Du mir vielleicht sagen wo ich den nun das TFloatEdit finde ?
Bis dahin
Olli
Olli
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: Try - Funktion?
TryStrToInt?
http://lazarus-ccr.sourceforge.net/docs ... toint.html" onclick="window.open(this.href);return false;
von hier
http://lazarus-ccr.sourceforge.net/docs ... dex-5.html" onclick="window.open(this.href);return false;
Edit:
ooopps das hatte Michael ja schon erwähnt
http://lazarus-ccr.sourceforge.net/docs ... toint.html" onclick="window.open(this.href);return false;
von hier
http://lazarus-ccr.sourceforge.net/docs ... dex-5.html" onclick="window.open(this.href);return false;
Edit:
ooopps das hatte Michael ja schon erwähnt
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Try - Funktion?
Was ziemlich sinnlos ist, da StrToInt die Exception auslöst, wenn TryStrToInt das Ergebnis False zurückliefert.mschnell hat geschrieben:Du kannst einen try ... except Block um StrToInt herum machen
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: Try - Funktion?
Würde mich auch interessieren! Habs nur zum runterladen gefunden, für Delphi.Olli hat geschrieben:Hallo Antrepolit,
wo finde ich denn dieses TFloatEdit, muß ich dazu noch ein extra Paket installieren?
Ich habe mir für diese Felder letztens extra das Paket "JUJIBOUTILS" installiert.
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2805
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Try - Funktion?

Sollte Teil der LCL sein, also ohne Extra Package.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: Try - Funktion?
Das ist aber das TFloatSpinEdit. Das hatte ich auch schon vorgeschlagen.