Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Nur Integer Werte im Edit Fenster zulassen (https://www.delphipraxis.net/75518-nur-integer-werte-im-edit-fenster-zulassen.html)

benisenis 20. Aug 2006 20:52


Nur Integer Werte im Edit Fenster zulassen
 
Hallo,
wie kann ichs machen, dass in nem Edit Fenster nur Zahlen eingegebn werden können? Aber 'Backspace' 'Entfernen' und so weiter sollen natürlich funktionieren!

Gruß

benisenis

mkinzler 20. Aug 2006 20:55

Re: Integer Werte im Edit Fenster verbieten
 
Nimm nen MaskedEdit.

EDatabaseError 20. Aug 2006 20:57

Re: Integer Werte im Edit Fenster verbieten
 
schau dir mal mein Edit an...

http://www.delphipraxis.net/internal...ct.php?t=89238

SirThornberry 20. Aug 2006 21:05

Re: Integer Werte im Edit Fenster verbieten
 
@benisenis: Willst du nun Integerwerte verbieten (wie im Titel beschrieben) oder nur Integerwerte erlauben (wie im Beitrag beschrieben)? Korrigiere doch bitte eines davon oder steh ich wieder neben mir und lese das einfach falsch :gruebel:

benisenis 20. Aug 2006 21:10

Re: Integer Werte im Edit Fenster verbieten
 
Oh sorry, ich will nur Integer Werte zulassen! Und Quasi alles andere verbieten auser Backspace eben !

benisenis 20. Aug 2006 21:12

Re: Nur Integer Werte im Edit Fenster zulassen
 
@mkinzler, mh kannst du das bitte etwas näher erläutern?
@EDatabaseError, dass versteh ich noch weniger :)

Sorry aber ich bin noch ein "ziemlicher" Newbie!

EDatabaseError 20. Aug 2006 21:13

Re: Integer Werte im Edit Fenster verbieten
 
Zitat:

Zitat von benisenis
Oh sorry, ich will nur Integer Werte zulassen! Und Quasi alles andere verbieten auser Backspace eben !

hast du dir mein Edit angeschaut... Da gibts den InputTyp...inpInteger ;-)

mkinzler 20. Aug 2006 21:14

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

@mkinzler, mh kannst du das bitte etwas näher erläutern?
Ein TMaskedEdit ist eine Editkomponente, welche eine Eingabemaske besitzt. In ihr kann man festtlegen was eingegeben werden kann.
Näheres findest du in der Delphi OH.

benisenis 20. Aug 2006 21:15

Re: Nur Integer Werte im Edit Fenster zulassen
 
@ EDatabaseError
Ja hab ich schon gesehen, nur scheiter ich dran, dass in mein Delphi zu bekommen!

EDatabaseError 20. Aug 2006 21:16

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

Zitat von mkinzler
Zitat:

@mkinzler, mh kannst du das bitte etwas näher erläutern?
Ein TMaskedEdit ist eine Editkomponente, welche eine Eingabemaske besitzt. In ihr kann man festtlegen was eingegeben werden kann.
Näheres findest du in der Delphi OH.

Im MaskEdit kann man aber nur eine bestimmte Länge definieren über das MaskFeld - oder

Matze 20. Aug 2006 21:16

Re: Nur Integer Werte im Edit Fenster zulassen
 
Wie wäre es einfach damit?

Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject;
  var Key: Char);
begin

  if not (key in [#8, #45, #48..#57]) then
    key := #0;
end;
#8: Backspace
#45: Minus
#48-#57: Ziffern

Im OnChange muss man dann eben auf die Größe der zahl überprüfen.

EDatabaseError 20. Aug 2006 21:16

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

Zitat von benisenis
@ EDatabaseError
Ja hab ich schon gesehen, nur scheiter ich dran, dass in mein Delphi zu bekommen!

such mal im Forum...da findest du bestimmt hilfe die Unit zu installieren

mkinzler 20. Aug 2006 21:17

Re: Nur Integer Werte im Edit Fenster zulassen
 
Ja hab ich schon gesehen, nur scheiter ich dran, dass in mein Delphi zu bekommen! :gruebel:
Woran happerts? Welche delphiversion?

mkinzler 20. Aug 2006 21:18

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

Im MaskEdit kann man aber nur eine bestimmte Länge definieren über das MaskFeld - oder
Maximallänge und erlaubte Zeichen (auch gemischt).

benisenis 20. Aug 2006 21:20

Re: Nur Integer Werte im Edit Fenster zulassen
 
Naja ich hab bisher noch keine externen Units in mein Delphi eingebaut!
Ich hab Delphi 2005 Architekt!

ErazerZ 20. Aug 2006 21:20

Re: Nur Integer Werte im Edit Fenster zulassen
 
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in [#8{bs}, #46{entf}, #48..#57{0-9}]) then
    Key := #0;
end;

Matze 20. Aug 2006 21:22

Re: Nur Integer Werte im Edit Fenster zulassen
 
@Erazer: Fast das gleiche habe ich doch gerade gepostet. :gruebel:

Bei dir wird jedoch das Minus mit gesperrt und die Entf-Taste muss man nicht mit einschließen, die geht so oder so.

benisenis 20. Aug 2006 21:27

Re: Nur Integer Werte im Edit Fenster zulassen
 
@Matze & erazer
Funktioniert beides nicht, kann immer noch Buchstaben eingeben!

Luckie 20. Aug 2006 21:28

Re: Nur Integer Werte im Edit Fenster zulassen
 
Hast du im OI auch den Eventhandler mit dem Edit verbunden?

Matze 20. Aug 2006 21:29

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

Zitat von benisenis
@Matze & erazer
Funktioniert beides nicht, kann immer noch Buchstaben eingeben!

Das du das im OnKEyPress-Ereignis? Dann kann das eigentlich nicht sein. :?

Cyberbob 20. Aug 2006 21:31

Re: Nur Integer Werte im Edit Fenster zulassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn du bei deiner Edit-Feld im Objektinspektor oben auf Erreignisse und dann unten auf OnKeyPress Klickst, dort dann:

if not (Key in [#8{bs}, #46{entf}, #48..#57{0-9}]) then
Key := #0;

eingibts, sollte das funktionieren

3_of_8 20. Aug 2006 21:57

Re: Nur Integer Werte im Edit Fenster zulassen
 
Integer ist signed, man darf also, falls man wirklich Integerwerte zulassen will, das - und evtl auch das + nicht vergessen. Aber auch nur an der geeigneten Position.

Matze 20. Aug 2006 22:13

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

Zitat von 3_of_8
Aber auch nur an der geeigneten Position.

Huch stimmt, das überprüft mein Code nicht.

Meflin 21. Aug 2006 00:13

Re: Nur Integer Werte im Edit Fenster zulassen
 
Alternativ könnte man auch noch ein Spin-Edit (Palette Beispiele) nehmen. Dann hat man selbst überhauptkeine Arbeit mehr und die meisten DAUs erkennen auch dass man da ne Zahl eintippen soll :roll:


Muetze1 21. Aug 2006 08:11

Re: Nur Integer Werte im Edit Fenster zulassen
 
Hinweis zu den ganzen OnKeyPress-Methoden: Diese sind keine Lösung, da man bei Ihnen immernoch mit STRG-V Code einfügen kann in das Edit, welches auch andere Zeichen als die erlaubten beinhaltet. Das setzem vom ES_NUMBER Style als alternative hat das gleiche Manko.

Brainshock 21. Aug 2006 10:05

Re: Nur Integer Werte im Edit Fenster zulassen
 
Hi,

vielleicht hilft dir das weiter:

#160:Numeric editbox

Hawkeye219 21. Aug 2006 10:35

Re: Nur Integer Werte im Edit Fenster zulassen
 
Hallo Brainshock,

wie Muetze1 schon richtig bemerkte, ist auch bei dieser Lösung das Einfügen unzulässiger Zeichen über die Zwischenablage möglich. Zudem verhindert sie zuverlässig das Einfügen eines Vorzeichens über die Tastatur.

Gruß Hawkeye

benisenis 21. Aug 2006 10:57

Re: Nur Integer Werte im Edit Fenster zulassen
 
OK, Danke für die vielen Antworten!
Ich habs jetzt so gemacht, wie Matze & Erazer mir gesagt haben! Ich glaub nicht, dass jemand versuchen wird in das Edit einzufügen, also ist es nicht so wicht ig :)

Gruß

Benisenis

Matze 21. Aug 2006 11:22

Re: Nur Integer Werte im Edit Fenster zulassen
 
Hi,

dann würde ich aber nicht direkt StrToInt auf das Edit anwenden, sondern sicherheitshalber überprüfen, ob es sich auch wirklich um einen Integer-Wert handelt. Möglichkeiten wären u.a. Delphi-Referenz durchsuchenVal(), Delphi-Referenz durchsuchentry - except oder Delphi-Referenz durchsuchenTryStrToInt.

Cöster 21. Aug 2006 17:25

Re: Nur Integer Werte im Edit Fenster zulassen
 
Ich würd's so machen:

Delphi-Quellcode:
var EdText: String;

procedure TForm1.Edit1Change(Sender: TObject);
var temp: integer;
begin
  Try
    temp := StrToInt(Edit1.Text);
    EdText := Edit1.Text;
  Except
    Edit1.Text := EdText;
  end;
end;

Muetze1 21. Aug 2006 17:57

Re: Nur Integer Werte im Edit Fenster zulassen
 
... und wozu dient die Zuweisung im Except-Block? Wie bewegen nix aus dem Edit und überschreiben auch nix...

Matze 22. Aug 2006 10:06

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

Zitat von Muetze1
Wie bewegen nix aus dem Edit und überschreiben auch nix...

Also wenn StrToInt fehlschlägt, dann müsste EdText gar nicht initialisiert worden sein, somit steht nachher wahrscheninlich nicht viel im Edit (wobei ich sagen muss, ich weiß grad gar nicht, ob ein String immer leer ist, wenn er nicht initialisiert ist, ich setze generell einen Wert).

Also der Code ist irgendwie wirklich nichts. :stupid:
Ich würde Delphi-Referenz durchsuchenTryStrToInt oder Delphi-Referenz durchsuchenVal nehmen, da kann eigentlich nicht viel passieren. Dass auch Hexadazimalen Zahlen nicht als Integer angesehen werden, kannst du mit diesem Code erreichen.

Cöster 22. Aug 2006 10:45

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

Zitat von Matze
Zitat:

Zitat von Muetze1
Wie bewegen nix aus dem Edit und überschreiben auch nix...

Also wenn StrToInt fehlschlägt, dann müsste EdText gar nicht initialisiert worden sein, somit steht nachher wahrscheninlich nicht viel im Edit (wobei ich sagen muss, ich weiß grad gar nicht, ob ein String immer leer ist, wenn er nicht initialisiert ist, ich setze generell einen Wert).

Also der Code ist irgendwie wirklich nichts. :stupid:

Warum nicht? Sicherlich ist der Code noch nicht perfekt (man sollte vor's Try noch
Delphi-Quellcode:
If not (Edit1.Text = '') then
setzen, aber er funzt. Am Anfang sollte das Edit-Feld natürlich leer sein. Dann kann man was eingeben. Es kann zu keinem Zeitpunkt etwas im Edit-Feld stehen, was kein Integer-Wert ist (wie es ja auch verlangt wurde).

Khabarakh 22. Aug 2006 11:10

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

[...] aber er funzt
Schon einmal versucht, als Erstes ein Komma einzugeben? Klar, "-" ist kein Integerwert, der User wird dir trotzdem an die Gurgel springen.

Muetze1 22. Aug 2006 11:23

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

Zitat von Cöster
Warum nicht? Sicherlich ist der Code noch nicht perfekt (man sollte vor's Try noch
Delphi-Quellcode:
If not (Edit1.Text = '') then
setzen, aber er funzt. Am Anfang sollte das Edit-Feld natürlich leer sein. Dann kann man was eingeben. Es kann zu keinem Zeitpunkt etwas im Edit-Feld stehen, was kein Integer-Wert ist (wie es ja auch verlangt wurde).

Ok, wir fassen nochmal zusammen warum der Code nicht gut ist:

1. ein einfügen von Text erfolgt immernoch und würde bei dir eine Zuweisung mit undefinierten Daten ins edit bewirken (siehe Punkt 2)
2. Wenn StrToInt() einen Fehler meldet durch eine Exception, dann wird deine Variable EdText nicht initialisiert und du weist im Except-Block dem Edit einen undefinierten bzw. alten Wert zu.
3. Durch das Change Event wird es bei vielen Kombinationen die während der Eingabe auftreten (aber im Endeffekt gültig sind) zu Fehlern führen:
3a) führende Vorzeichen wie + und -
3b) Exponenten E
4. Welchen Sinn macht es bei einer fehlerhaften Eingabe den kompletten Inhalt des Edits zurück zu setzen? Das würde z.B. eine Eingabe verhindern bzw. unmöglich machen, welche während des Eingabevorgangs ungültig ist, aber im Zusammenhang mit der kompletten Eingabe wiederrum gültig.

Cöster 22. Aug 2006 15:13

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

Zitat von Muetze1
Zitat:

Zitat von Cöster
Warum nicht? Sicherlich ist der Code noch nicht perfekt (man sollte vor's Try noch
Delphi-Quellcode:
If not (Edit1.Text = '') then
setzen, aber er funzt. Am Anfang sollte das Edit-Feld natürlich leer sein. Dann kann man was eingeben. Es kann zu keinem Zeitpunkt etwas im Edit-Feld stehen, was kein Integer-Wert ist (wie es ja auch verlangt wurde).

Ok, wir fassen nochmal zusammen warum der Code nicht gut ist:

1. ein einfügen von Text erfolgt immernoch und würde bei dir eine Zuweisung mit undefinierten Daten ins edit bewirken (siehe Punkt 2)
2. Wenn StrToInt() einen Fehler meldet durch eine Exception, dann wird deine Variable EdText nicht initialisiert und du weist im Except-Block dem Edit einen undefinierten bzw. alten Wert zu.
3. Durch das Change Event wird es bei vielen Kombinationen die während der Eingabe auftreten (aber im Endeffekt gültig sind) zu Fehlern führen:
3a) führende Vorzeichen wie + und -
3b) Exponenten E
4. Welchen Sinn macht es bei einer fehlerhaften Eingabe den kompletten Inhalt des Edits zurück zu setzen? Das würde z.B. eine Eingabe verhindern bzw. unmöglich machen, welche während des Eingabevorgangs ungültig ist, aber im Zusammenhang mit der kompletten Eingabe wiederrum gültig.

1. nein, man kann keinen Text einfügen.
2. Wenn StrToInt einen Fehler meldet, wird der Text des Edit-Feldes wieder auf den Zustand von vor dem Change-Event gesetzt. Wenn im Edit-Feld also '234' steht und man dann ein 'b' eingeben will, bleibt '234' stehen.
3a)Das Problem kann man relativ leicht umgehen:
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var temp: integer;
begin
  If (Edit1.Text = '') or (Edit1.Text = '-') or (Edit1.Text = '+') then
    EdText := Edit1.Text
  Else
    Try
      temp := StrToInt(Edit1.Text);
      EdText := Edit1.Text;
    Except
      Edit1.Text := EdText;
    end;
end;
3b) Ich ging davon aus, dass keine Exponenten zugelassen werden dürfen. Das würde "if not key in ..." ja auch nicht besser gehen.
4. Es wird ja nicht der komplette Inhalt des Edit-Feldes wieder zurückgesetzt. Nur der letzte Tastendruck (bzw. das letzte Einfügen per Strg+V oder Rechtsklick->Einfügen) wird ignoriert.

Das einzige, was nicht geht (aber wahrscheinlich auch nicht gehen soll, wenn der Edit-Inhalt als Integer-Wert weiterverarbeitet werden soll), ist mit 'E' zu rechnen. Wenn du das anders siehst, würde mich ein konkretes Beispiel interessieren.

TeronG 22. Aug 2006 15:48

Re: Nur Integer Werte im Edit Fenster zulassen
 
OK ich gebe zu, daß ich nur die erste Seite gesichtet hab und somit evtl. was überlesen habe.... aber wenn ich nur Zahlen brauchen kann benutze ich immer gerne den TSpinEdit.

Meflin 22. Aug 2006 16:07

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

Zitat von TeronG
OK ich gebe zu, daß ich nur die erste Seite gesichtet hab und somit evtl. was überlesen habe.... aber wenn ich nur Zahlen brauchen kann benutze ich immer gerne den TSpinEdit.

hast du http://www.delphipraxis.net/internal...=597635#597635 :P

Aber naja, die einfachste Lösung wird mal wieder ignoriert :roll:


Lannes 22. Aug 2006 20:11

Re: Nur Integer Werte im Edit Fenster zulassen
 
Hallo,

für kleinere Zahlenbereiche ja, für größere nicht ideal, denn dazu muss man EditorEnabled auf false setzen, und man kann nichts mehr eingeben.

Meflin 22. Aug 2006 20:19

Re: Nur Integer Werte im Edit Fenster zulassen
 
Zitat:

Zitat von Lannes
für kleinere Zahlenbereiche ja, für größere nicht ideal, denn dazu muss man EditorEnabled auf false setzen, und man kann nichts mehr eingeben.

Kommt drauf an was du mit größeren Zahlenbereichen meinst... für nen Integer reichts allemal ;)



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