AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Geldbeträge in Editboxen

Ein Thema von mannewolff · begonnen am 24. Jun 2009 · letzter Beitrag vom 24. Jun 2009
Antwort Antwort
mannewolff

Registriert seit: 21. Okt 2008
48 Beiträge
 
RAD-Studio 2009 Arc
 
#1

Geldbeträge in Editboxen

  Alt 24. Jun 2009, 10:54
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
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Geldbeträge in Editboxen

  Alt 24. Jun 2009, 11:02
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.

Edit.Text := Format('%0.2f', [Geldbetrag]); Ist nur schnell aus dem Kopf aufgeschrieben.

MfG
BAMatze

Edit1: Hier ein Beitrag, wo sowas ausführlich diskutiert wird. Hoffe hilft dir.
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#3

Re: Geldbeträge in Editboxen

  Alt 24. Jun 2009, 11:02
Bei Delphi-Referenz durchsuchenFormat gibt es das Argument "m":

Zitat:
m
Währung. Das Argument muss ein Gleitkommawert sein. Der Wert wird in einen String umgewandelt, der einen Währungsbetrag darstellt. Die Steuerung der Konvertierung erfolgt mithilfe der globalen Variablen CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator und CurrencyDecimals oder deren Entsprechungen in einer TFormatSettings-Datenstruktur. Enthält der Format-String einen Genauigkeitsbezeichner, setzt dieser den Wert in der globalen Variablen CurrencyDecimals bzw. in deren TFormatSettings-Entsprechung außer Kraft.
Dann müsstest du allerdings nach jedem Tastendruck den Wert auslesen, in einen Float-Wert umwandeln, über Format in einen String wandeln und wieder ins Edit schreiben. Ob das sinnvoll ist, sei mal dahingestellt.

Vielleicht geht es aber auch einfacher...

//Edit: @BAMatze: Muss aber nicht, wenn du "f" verwendest, der Wert ein Floatwert sein?
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Geldbeträge in Editboxen

  Alt 24. Jun 2009, 11:09
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?
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#5

Re: Geldbeträge in Editboxen

  Alt 24. Jun 2009, 11:10
Nope, genau das meinte ich.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Geldbeträge in Editboxen

  Alt 24. Jun 2009, 11:23
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:
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;
€: 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)

Also so in etwa:
Delphi-Quellcode:
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;
€: Universeller gestaltet.

Ein Schönheitsfehler hat es noch... Minus wird nur bei leerem Edit erlaubt. Da müsste man nachbessern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz