Einzelnen Beitrag anzeigen

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, 12: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