Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Edit eingabe begrenzen (nur EIN Komma) (https://www.delphipraxis.net/31430-edit-eingabe-begrenzen-nur-ein-komma.html)

Tau 9. Okt 2004 00:49


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

Luckie 9. Okt 2004 01:09

Re: Edit eingabe begrenzen (nur EIN Komma)
 
Kuck mit Delphi-Referenz durchsuchenpos im OnChange Ereignis des Edits, ob ein Komma da ist. Wenn ja, dann setzt du eine boolsche Variable auf True und wenn diese True ist, verhinderst du im OnKeyPress dass ein weiteres Komma eingeben werden kann.

Dani 9. Okt 2004 01:21

Re: Edit eingabe begrenzen (nur EIN Komma)
 
Hi,

da fällt mir nur eine Schleife durch alle Zeichen ein :-/

Delphi-Quellcode:
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;
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...

Luckie 9. Okt 2004 01:23

Re: Edit eingabe begrenzen (nur EIN Komma)
 
Zitat:

Zitat von Dani
da fällt mir nur eine Schleife durch alle Zeichen ein :-/

Und warum? Delphi-Referenz durchsuchenPos gibt dir genau den Index des gefundenen Zeichens zurück.

Dani 9. Okt 2004 01:27

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?!

Luckie 9. Okt 2004 01:33

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.

Dani 9. Okt 2004 01:44

Re: Edit eingabe begrenzen (nur EIN Komma)
 
Zitat:

das sollte um einiges performanter sein, als deine Lösung mit der Schleife
Das ist es auch, aber wenn der Benutzer einen falschen Wert per Copy&Paste einfügt, wird der ohne Prüfung übernommen.

Luckie 9. Okt 2004 02:34

Re: Edit eingabe begrenzen (nur EIN Komma)
 
Das sollte auch ein OnChange auslösen.

Hansa 9. Okt 2004 03:35

Re: Edit eingabe begrenzen (nur EIN Komma)
 
So geht das :

Benutze am besten das OnKeyPress.

Delphi-Quellcode:
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;
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.

[EDIT1] Vom OnChange ist abzuraten. 8)
[EDIT2] Keypress wird viel früher abgearbeitet. Wozu noch das ganze Edit dauernd überwachen ? Lieber nur einen Tastendruck.

Tau 9. Okt 2004 03:51

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 03:17 Uhr.
Seite 1 von 2  1 2      

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