Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Edit Feld begrenzen mit bestimmten Werten (https://www.delphipraxis.net/52888-edit-feld-begrenzen-mit-bestimmten-werten.html)

Grolle 6. Sep 2005 10:01


Edit Feld begrenzen mit bestimmten Werten
 
Hallo!
Ich habe ein EditFeld und möchte in diesem nur die Zahlen von 200 - 999
zulassen. Wie kann ich am Einfachstendas realisieren? (Es gegen ein
Mask-Edit auszutauschen wäre zu aufwändig!)

RavenIV 6. Sep 2005 10:29

Re: Edit Feld begrenzen mit bestimmten Werten
 
du kannst in OnChange prüfen, ob die zahl im gewünschten bereich ist.

shmia 6. Sep 2005 10:31

Re: Edit Feld begrenzen mit bestimmten Werten
 
Du könntest folgende Prozedure aufrufen, dann kanst du nur noch Ziffern eingeben.
Delphi-Quellcode:
procedure MakeNumericControl(theControl: TWinControl);
begin
   Assert(Assigned(theControl));
   SetWindowLong(theControl.Handle, GWL_STYLE,
      GetWindowLong(theControl.Handle, GWL_STYLE) or ES_NUMBER);
end;
Du setzt MaxLength von deinem Editcontrol auf 3.

leddl 6. Sep 2005 10:33

Re: Edit Feld begrenzen mit bestimmten Werten
 
Und sowieso im OnKeyPress erstmal nur Zahlen zulassen
Delphi-Quellcode:
if not key in [0..9] Then key := #0;
Aber OnChange ist keine gute Idee, denn wenn der User anfängt einzugeben, wird er niemals sofort 200 eingeben, sondern eben erstmal eine 2. Die wäre zu klein, und damit nicht zulässig.
Überprüfe also die Werte am besten im OnExit.

//Edit:
Jetzt hab ich den roten Kasten einfach ignoriert und nix dazugeschrieben :roll:
Mein Post bezog sich natürlich auf RavenIVs Post.

Grolle 6. Sep 2005 10:39

Re: Edit Feld begrenzen mit bestimmten Werten
 
Danke für eure Antworten. Im Prinzip muss ich beim OnExit ja
nur testen ob die erste Zahl ne 2 oder größer ist, gell?
Thanx!

leddl 6. Sep 2005 10:42

Re: Edit Feld begrenzen mit bestimmten Werten
 
Ähm, nö. Ich würde einfach
Delphi-Quellcode:
if StroToInt(Edit1.text) in [200..999] Then
//bla
else
//Editwert auf gültigen Wert setzen oder Fehlermeldung und FOkus auf Edit
//oder sonst irgendein Mist ;)
schreiben, denn wenn du nur prüfst, ob die erste Zahl größer gleich 2 ist, läßt du auch ein- und zweistellige Zahlen zu.

//Edit:
Nicht zu vergessen, was shmia gesagt hat: MaxLength auf 3 setzen! Dann kann man zumindest schonmal nix größeres reinschreiben.

Grolle 6. Sep 2005 10:43

Re: Edit Feld begrenzen mit bestimmten Werten
 
:wall: klar da hast du recht!

Grolle 6. Sep 2005 11:31

Re: Edit Feld begrenzen mit bestimmten Werten
 
Wieder ein Problem:
Delphi-Quellcode:
if StroToInt(Edit1.text) in [200..999] Then
Dabei bekomme ich eine Fehlermeldung (Konstantenausdruck verletzt untere Grenzen).
Sind da Zahlen größer als 255 möglich?

leddl 6. Sep 2005 11:34

Re: Edit Feld begrenzen mit bestimmten Werten
 
:shock: Oh Gott, klar geht das nicht. Mengen erlauben natürlich nur Zahlen bis 255. :wall: Das passiert, wenn man ohne Nachzudenken postet :lol: OK, dann mußt dus halt weniger elegant über ne normale Bereichsprüfung lösen. ;)

Lannes 6. Sep 2005 11:38

Re: Edit Feld begrenzen mit bestimmten Werten
 
Hallo,

mein Favorit ist das Ereignis OnChange in Verbindung mit OnEnter,
weil
1. eine Tastenüberprüfung das Kontextmenü sowie Strg+V und Umschalt+Insert nicht berücksichtigen kann, bzw letztendlich die Funktionalität unterbindet
2. das Setzen von ES_NUMBER das Einfügen von Text über die Zwischenablage nicht verhindert.

So verhindere ich falsche Eingaben:
Delphi-Quellcode:
//...
  sUndo : String;
//...
procedure TForm1.Edit1Change(Sender: TObject);
var PosCur : Integer;
    s : string;
    i : Integer;
const MAX = 999;
      MIN = 200;
begin
  try
    s := Edit1.Text;
    if s = '' then
      exit;
    PosCur := Edit1.SelStart;//falls Fehler, merken
    i := StrToInt(s);//Wenn Fehler dann >> except
    //Wenn
    if (s[1] = '-') or
       (i > MAX) or
       ((Length(s) = 3) and (i < MIN)) then
      raise Exception.Create('');//Exception auslösen >> except
    sUndo := Edit1.Text;
    except
      showmessage('Nur Werte zwischen '+IntToStr(MIN)+' und '+IntToStr(MAX)+' erlaubt!');
      Edit1.Text := sUndo;//Edit zurücksetzen
      if Length(s) > Length(sUndo) then
        PosCur := PosCur-1;
    end;
  Edit1.SelStart := PosCur;//Cursor an alte Position setzen
end;

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  sUndo := Edit1.Text;//wird in OnChange benötigt
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 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