Einzelnen Beitrag anzeigen

Alallart

Registriert seit: 8. Dez 2015
155 Beiträge
 
#5

AW: Währungeingabe mit TMaskEdit?

  Alt 20. Jan 2019, 15:41
Ich habe mir etwas programmiert. Es ist möglich nur Zahlen und ein Komma einzugeben, und Prozedur springt bei Enter-Taste in das nächste Feld. Vielleicht kann der eine oder andere mal drüber gucken ob da ein Fehler erkennbar ist oder man es besser machen kann.

Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  decPlaces = 2; //Anzahl Nachkommastellen
var
  s: string;
  p: Integer;
begin
  s := TEdit(Sender).Text;
  p := Pos(DecimalSeparator, s); //DecimalSeparator = Komma in DE

  //Begrenzt Eingabe auf folgende Zeichen
  if not (Key in ['0'..'9', DecimalSeparator, #8]) then // #8 = Backspace-Taste
    Key := #0;

  //WICHTIG: Diese Abfrage muss vorne stehen, sonst wird RETURN u. U. ignoriert.
  //Schickt Fokus bei ENTER zum nächsten Element.
  if Key = Chr(VK_RETURN) then //Wenn Return gedrückt wird...
  begin
    if s = 'then //Wenn Feld leer, dann vor dem Exit 0 eingeben.
      Key := '0';

    Self.Perform(WM_NEXTDLGCTL, 0, 0); //Springt zum nächsten Control
  end;

  //Lässt kein zweites Komma zu
  if (p > 0) and (Key = DecimalSeparator) then
  begin
    Key := #0;
    Exit;
  end;

  //Begrenzt die Eingabe auf z.B. zwei Nachkomma-Stellen
  if (Key <> #8) then //Backspace-Taste zulassen
    if (p > 0) then
      if Length(s) >= (p + decPlaces) then
      begin
        Key := #0;
        Exit;
      end;
end;

Geändert von Alallart (20. Jan 2019 um 15:45 Uhr)
  Mit Zitat antworten Zitat