![]() |
Edit eingabe begrenzen (nur EIN Komma)
Hallo Leute
ich habe ein Editfeld in dem möcht ich eine Zahl mit Komma Stelle eingeben. Die einschränkung für das eingeben von nur Zahlen inkl. Komma ist kein Problem. Wie kann ich es anstellen das nur Ein Komma eingegeben wird. :wall: Gruss Tau |
Re: Edit eingabe begrenzen (nur EIN Komma)
Kuck mit
![]() |
Re: Edit eingabe begrenzen (nur EIN Komma)
Hi,
da fällt mir nur eine Schleife durch alle Zeichen ein :-/
Delphi-Quellcode:
Edit: Luckies Methode klingt eleganter :mrgreen: allerdings würde ich statt einer boolschen Variable die Eigenschaft TEdit.Tag benutzen. Was dann noch bleibt, ist das Problem, wenn der User per Copy&Paste einen falschen Wert einfügt...
procedure TForm1.Edit1Change(Sender: TObject);
var i, count: Integer; s: String; begin count := 0; s := Edit1.Text; for i:=Length(s) downto 1 do begin If s[i] = ',' then begin inc(count); If count > 1 then Delete(s, i, 1); end; end; If count > 1 then begin Edit1.Text := s; Edit1.SelStart := MaxInt; end; end; |
Re: Edit eingabe begrenzen (nur EIN Komma)
Zitat:
![]() |
Re: Edit eingabe begrenzen (nur EIN Komma)
Schon, aber doch nur den des ersten Vorkommnisses? Damit weiß er ja noch nicht, wie oft das Zeichen enthalten ist?!
|
Re: Edit eingabe begrenzen (nur EIN Komma)
Wieso? Wenn ich das im OnChange prüfe, dann weiß ich doch sofort, ob ein Komma eingegeben wurde. Und wenn dann im OnKeyPress noch ein Komma kommt, schicke ich es in das Tastatur-Nirvana. das sollte um einiges performanter sein, als deine Lösung mit der Schleife.
|
Re: Edit eingabe begrenzen (nur EIN Komma)
Zitat:
|
Re: Edit eingabe begrenzen (nur EIN Komma)
Das sollte auch ein OnChange auslösen.
|
Re: Edit eingabe begrenzen (nur EIN Komma)
So geht das :
Benutze am besten das OnKeyPress.
Delphi-Quellcode:
ZulZeichen ist in diesem Fall '0'..'9', also ein Set. Auch mit C+P ist es mir dabei nicht gelungen einen 2. Decimalseparator einzufügen.
procedure TRealEdit.KeyPress(var Key: Char);
begin inherited; if Pos(DecimalSeparator, Text) = 0 then // einen . im RealEdit.text zulassen ZulZeichen := ZulZeichen + [DecimalSeparator] else ZulZeichen := ZulZeichen - [DecimalSeparator]; // zweiten . verhindern if not (Key in ZulZeichen) then Key := #0; end; [EDIT1] Vom OnChange ist abzuraten. 8) [EDIT2] Keypress wird viel früher abgearbeitet. Wozu noch das ganze Edit dauernd überwachen ? Lieber nur einen Tastendruck. |
Re: Edit eingabe begrenzen (nur EIN Komma)
Hallo Hansa
deine Lösung gefällt mir mit abstand am besten mir ist noch nicht ganz klar was du für einen Daten Type bei der Deklaration von ZulZeichen und DezimalSeparator verwendest. :?: Gruss Tau |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 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