![]() |
Geldbeträge in Editboxen
Moin.
Ich möchte einen Benutzer beliebige Geldbeträge in einer Eingabezeile eingeben lassen z.B. 20,00, 21987,40. Wenn ich es richtig sehe, kann ich einem Maskedit nur statische Masken anlegen z.B. _____,__ (5 vor 2 hinterm Komma). Wie macht ihr das ? -manne |
Re: Geldbeträge in Editboxen
du könntest ihn erstmal frei alles eingeben lassen und dann beim OnKeyDown des Edits die Überprüfung machen, ob es sich insgesamt um eine Zahl handelt, die eingegeben wurde und wenn dies der Fall ist mit Format den Text des Edits editieren.
Delphi-Quellcode:
Ist nur schnell aus dem Kopf aufgeschrieben.
Edit.Text := Format('%0.2f', [Geldbetrag]);
MfG BAMatze Edit1: ![]() |
Re: Geldbeträge in Editboxen
Bei
![]() Zitat:
Vielleicht geht es aber auch einfacher... //Edit: @BAMatze: Muss aber nicht, wenn du "f" verwendest, der Wert ein Floatwert sein? |
Re: Geldbeträge in Editboxen
naja Geldbetrag steht für mich als ein Platzhalter, der natürlich Typ double/ float haben sollte. Also genauer müsste man dann den eingegebenen Edit.Text -> Floatzahl (Geldbetrag: double) umwandeln (also mit strtofloat) und dann mit Format wieder auf Edit.Text schreiben. So war das gemeint oder meintest du einen anderen Sachverhalt @Daniel G?
|
Re: Geldbeträge in Editboxen
Nope, genau das meinte ich. ;)
|
Re: Geldbeträge in Editboxen
Eine neue Zuweisung an Edit.Text setzt aber den Cursor zurück. Wäre also für Prüfung nach der Eingabe OK.
Für die Prüfung bei der Eingabe hatte ich für ein Gewichtsfeld auch mal was gebastelt:
Delphi-Quellcode:
€: Für Währung müsste man noch das Minus-Zeichen in Ciphers aufnehmen und eigentlich auch auf 1x vorhanden Testen (war bei Gewicht aber nicht nötig)
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const EditKeys = #13#8#9; Ciphers = '0123456789'; MaxFrac = 2; var i : Integer; aText : String; begin aText := TEdit(Sender).Text; i := Pos(DecimalSeparator, aText); if i > 0 then if (Length(aText) -i) < MaxFrac then aText := Ciphers + Editkeys else aText := EditKeys else aText := Ciphers + EditKeys + DecimalSeparator; if Pos(Key, aText) <= 0 then Key := #0 end; Also so in etwa:
Delphi-Quellcode:
€: Universeller gestaltet.
procedure SetValidFloatKey(var aKey : Char; const CurrText : String; OnlyAbs : Boolean; MaxFrac : Integer = 2);
const EditKeys = #13#8#9; Ciphers = '-0123456789'; var i : Integer; aText : String; begin aText := CurrText; if (aKey = '-') and ((Length(aText) > 0) or (OnlyAbs)) then aKey := #0 else i := Pos(DecimalSeparator, aText); if i > 0 then if (Length(aText) -i) < MaxFrac then aText := Ciphers + Editkeys else aText := EditKeys else aText := Ciphers + EditKeys + DecimalSeparator; if Pos(aKey, aText) <= 0 then aKey := #0 end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin SetValidFloatKey(Key, TEdit(Sender).Text, False, 2); end; Ein Schönheitsfehler hat es noch... Minus wird nur bei leerem Edit erlaubt. Da müsste man nachbessern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz