Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Kommazahlen in TEdit (https://www.delphipraxis.net/148565-kommazahlen-tedit.html)

mannewolff 4. Mär 2010 08:54


Kommazahlen in TEdit
 
Moin.

Ich möchte, dass die User im TEdit Kommazahlen (12,12, 13.29) eingeben. Die Möglichkeiten, die ich bisher ausprobiert habe sind irgendwie suboptimal:

- Mit dem OnExit Event ein StrToFloat aufführen, wenn auf eine Exception gelaufen wird den Benutzer zu informieren, dass die Eingabe keine gültige Kommazahl ist.

- Mit MaskEdit arbeiten. Das hat den Nachteil, dass man sehr genau vorgeben muss, wie die Zahl aussehen soll.

Am Besten wäre eine Lösung, die nur Zahlen und das Komma im Editfeld erlaubt. Kennt da jemand was? Muss doch eigentlich Standard sein.

Merci
Manfred

mannewolff 4. Mär 2010 09:06

Re: Kommazahlen in TEdit
 
Erst googeln, dann fragen. Hier eine von vielen Möglichkeiten

Delphi-Quellcode:
procedure TMainForm.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  // Nur Punkt, Komma, Zahlen und Backspace zulassen
  if NOT (Key in [#8, '0'..'9', ',', '.']) then
    Key := #0;

  // , bzw. . nur einmal eingeben
  if (key = ',') or (key = '.') then
  if pos(',', Edit1.Text) > 0 then
  begin
    key := #0; exit;
  end;
 
  // . in , wandeln
  if Key = '.' then
    Key := ',';
end;

DeddyH 4. Mär 2010 09:09

Re: Kommazahlen in TEdit
 
Du könntest im OnKeyPress Key auswerten und bei ungültiger Eingabe (also weder Ziffer noch Decimalseparator) verwerfen. Das hat aber 2 Nachteile: der Decimalseparator kann so mehrfach eingegeben werden und über die Zwischenablage bekommt man trotzdem noch Quatsch hinein. Eine andere Möglichkeit, die mir spontan einfällt, wäre OnChange. Dort mit TryStrToFloat prüfen, ob etwas Plausibles drinsteht und ggf. durch eine vorher gemerkte Variable ersetzen.

himitsu 4. Mär 2010 09:11

Re: Kommazahlen in TEdit
 
Hier im Forum suchennur kommazahlen eingeben

thesign 10. Mai 2010 00:50

Re: Kommazahlen in TEdit
 
man kann auch noch die folgenden zeilen..

Delphi-Quellcode:
// , bzw. . nur einmal eingeben
  if (key = ',') or (key = '.') then
  if pos(',', Edit1.Text) > 0 then
  begin
    key := #0; exit;
  end;
zu:

Delphi-Quellcode:
// , bzw. . nur einmal eingeben
  if (key = ',') or (key = '.') then
  if pos(',', TEdit(Sender).Text) > 0 then
  begin
    key := #0; exit;
  end;
..abändern, und somit die Procedure für mehrere OnKeyPress Ereignisse einsetzen (habe ich zB in meinem Programm verwendet, sieht bei 13 TEdits hübscher aus)

lg,sign


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 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 by Thomas Breitkreuz