AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Edit eingabe begrenzen (nur EIN Komma)
Thema durchsuchen
Ansicht
Themen-Optionen

Edit eingabe begrenzen (nur EIN Komma)

Ein Thema von Tau · begonnen am 9. Okt 2004 · letzter Beitrag vom 11. Okt 2004
Antwort Antwort
Seite 1 von 2  1 2      
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#1

Edit eingabe begrenzen (nur EIN Komma)

  Alt 9. Okt 2004, 01:49
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.

Gruss Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Edit eingabe begrenzen (nur EIN Komma)

  Alt 9. Okt 2004, 02:09
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Edit eingabe begrenzen (nur EIN Komma)

  Alt 9. Okt 2004, 02:21
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 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...
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Edit eingabe begrenzen (nur EIN Komma)

  Alt 9. Okt 2004, 02:23
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Edit eingabe begrenzen (nur EIN Komma)

  Alt 9. Okt 2004, 02:27
Schon, aber doch nur den des ersten Vorkommnisses? Damit weiß er ja noch nicht, wie oft das Zeichen enthalten ist?!
Dani H.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Edit eingabe begrenzen (nur EIN Komma)

  Alt 9. Okt 2004, 02:33
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Edit eingabe begrenzen (nur EIN Komma)

  Alt 9. Okt 2004, 02:44
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.
Dani H.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Edit eingabe begrenzen (nur EIN Komma)

  Alt 9. Okt 2004, 03:34
Das sollte auch ein OnChange auslösen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Edit eingabe begrenzen (nur EIN Komma)

  Alt 9. Okt 2004, 04:35
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Edit eingabe begrenzen (nur EIN Komma)

  Alt 9. Okt 2004, 04:51
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
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.
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