Try - Funktion?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
AlohaBanane
Beiträge: 8
Registriert: So 16. Okt 2011, 08:42

Try - Funktion?

Beitrag von AlohaBanane »

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.

Jochen
Beiträge: 35
Registriert: So 30. Nov 2008, 23:35

Re: Probleme mit Edit-Feldern

Beitrag von Jochen »

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.

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;
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.

Jochen
Beiträge: 35
Registriert: So 30. Nov 2008, 23:35

Re: Try - Funktion?

Beitrag von Jochen »

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?
Zuletzt geändert von Jochen am Mi 4. Jan 2012, 14:06, insgesamt 1-mal geändert.

u-boot
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?

Beitrag von u-boot »

Ist wohl "nachbearbeitet".

Ich hatte mich auch schon gewundert.....
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Olli
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?

Beitrag von Olli »

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...

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

Antrepolit
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?

Beitrag von Antrepolit »

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.
Grüße, Antrepolit

care only if your os is really burning

Olli
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?

Beitrag von Olli »

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.
Bis dahin
Olli

Benutzeravatar
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?

Beitrag von m.fuchs »

Olli hat geschrieben:aber ich würde das schon bei der Eingabe 'KeyPress' prüfen
Kann man durchaus machen, dann aber so:

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;
Die Prüfroutine bei Bedarf natürlich um weitere Werte ergänzen.

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

mschnell
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?

Beitrag von mschnell »

Du kannst einen try ... except Block um StrToInt herum machen oder die Funktion TryStrToInt benutzen.

-Michael

Olli
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?

Beitrag von Olli »

m.fuchs hat geschrieben: Kann man durchaus machen, dann aber so:

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;
Die Prüfroutine bei Bedarf natürlich um weitere Werte ergänzen.

Dann kann man das Minuszeichen auch nachträglich noch an die erste Position setzen. Und deinen inherited-Aufruf versteh ich auch nicht so richtig.
äh ja, geht natürlich so noch besser deine Lösung. Wie gesagt, als neu Pascaljaner gibbet es noch einiges zu lernen :)
Achso, kannst Du mir vielleicht sagen wo ich den nun das TFloatEdit finde ?
Bis dahin
Olli

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Try - Funktion?

Beitrag von creed steiger »

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

Socke
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?

Beitrag von Socke »

mschnell hat geschrieben:Du kannst einen try ... except Block um StrToInt herum machen
Was ziemlich sinnlos ist, da StrToInt die Exception auslöst, wenn TryStrToInt das Ergebnis False zurückliefert.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Jochen
Beiträge: 35
Registriert: So 30. Nov 2008, 23:35

Re: Try - Funktion?

Beitrag von Jochen »

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.
Würde mich auch interessieren! Habs nur zum runterladen gefunden, für Delphi.

Benutzeravatar
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?

Beitrag von m.fuchs »

Bild

Sollte Teil der LCL sein, also ohne Extra Package.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Jochen
Beiträge: 35
Registriert: So 30. Nov 2008, 23:35

Re: Try - Funktion?

Beitrag von Jochen »

Das ist aber das TFloatSpinEdit. Das hatte ich auch schon vorgeschlagen.

Antworten