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 Eingabe von Buchstaben verhindern (https://www.delphipraxis.net/39037-eingabe-von-buchstaben-verhindern.html)

Aike 27. Jan 2005 20:13


Eingabe von Buchstaben verhindern
 
Tach

ich wollte mal wissen, wie ich verhindern kann, dass jemand Buchstaben in mein Edit-Feld eingibt. Das habe ich so probiert, ging aber nicht:
Delphi-Quellcode:
procedure TfrmRechner.edEingabeKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var i:integer;
    buchstabe:boolean;
    Zahl:array[0..9] of integer;
begin
  buchstabe:=false;

  for i:=0 to 9 do
    zahl[i]:=i;
 
  for i:=0 to 9 do
  begin
    if Key<>zahl[i] then
      buchstabe:=true;
    if Key=zahl[i] then
      buchstabe:=false;

    if not Buchstabe then
      break;
  end;

  if Buchstabe then
    Key:=0; //was besseres ist mir nicht eingefallen. gibt 's denn sowas wie Key:=''?
end;

stefan2005 27. Jan 2005 20:19

Re: Eingabe von Buchstaben verhindern
 
hi,
ähh also ich glaube dass die Variable "Key" den ASCII-Code enthält.
und Zahlen haben folgende ASCII-Codes:

0: 30
1: 31
.. ..
9: 39

=> nicht von 0 bis 9 sonder von 30 bis 39 überprüfen ob eine Zahl eingegeben wurde

ich hoff das Stimmt

außerdem musst du diesen Quellcode im OnKeyPress Event einfügen und nicht im OnKeyDown Event

cu,
stefan2005

malo 27. Jan 2005 20:28

Re: Eingabe von Buchstaben verhindern
 
Wenn du verhindern willst, dass ein Buchstabe EINGETIPPT wurde, kannst du es doch ganz einfach so machen:

Delphi-Quellcode:
(if key = '0') or (if key = '1') or (if key = '2') or (if key = '3') or (if key = '4') or ... (if key = '9') then
  Buchstabe := false
  else
    Buchstabe := true;
;)

m.wollert 27. Jan 2005 20:29

Re: Eingabe von Buchstaben verhindern
 
Delphi-Quellcode:
const CKeys = ['0'..'9'];
begin
  if Key not in CKeys then Key := #0; // Key := #0 -> Key beinhaltet 'nichts' (wobei nichts ja auch nicht richtig ist - es beinhaltet ja den Wert "0" ;)
end;
Ich hoffe das passt gleich, habe kein Delphi offen. Solltest aber bedenken, daß Du auch noch die Back-Space-Taste drücken können solltest - erweiter dann die Konstante einfach so:
Delphi-Quellcode:
const CKeys = ['0'..'9', #9, #8]; // etc...
Sollte es nicht klappen dann musst Du mit dem Code etwas rumtüfteln. Zudem muss ich Stefan2005 mit dem Ereignis zustimmen.

MfG Michael Wollert

Aike 27. Jan 2005 20:30

Re: Eingabe von Buchstaben verhindern
 
Und was soll passieren, wenn 's ein Buchstabe ist? :-)

alcaeus 27. Jan 2005 20:31

Re: Eingabe von Buchstaben verhindern
 
Hallo,

wie bereits erwaehnt wurde, ist in der Variable "Key" der ASCII-Code des Zeichens enthalten.
Folgende solltest du erlauben: 48 ('0') bis 57 ('9'), 9 (Backspace) und evtl. 13 (Return).
Also fragst du ab:
Delphi-Quellcode:
if Key not in [9, 13, 48..57] then
  Key := 0;
Sollte so eigentlich funktionieren.

Greetz
alcaeus

m.wollert 27. Jan 2005 20:34

Re: Eingabe von Buchstaben verhindern
 
Hallo nochmal,

im OnKeyPress-Event ist Key vom Typ "Char", d.h. Du musst eine Typenkonvertierung durchführen wenn Du auf einen Ascii-Wert hin vergleichen möchtest - dies erreichst Du mit einer einleitenden Raute (#0 = $0)

MfG Michael Wollert

Aike 27. Jan 2005 20:36

Re: Eingabe von Buchstaben verhindern
 
Delphi-Quellcode:
if Key not in CKeys then
liefert mir folgenden Fehler:
Operator oder Semikolon fehlt
Operator ist auf diesen Operandentyp nicht anwendbar

malo 27. Jan 2005 20:36

Re: Eingabe von Buchstaben verhindern
 
Man könnte doch eigentlich auch alle Zeichen von 65 bis 255 sperren, dann braucht man sich doch keine Sorgen mehr drum zu machen, ob noch wichtige Tastencodes dazwischen sind, oder? Oder kommen noch Sonderzeichen vor #65?

also so:

Delphi-Quellcode:
if not key in [65..255] then
  Buchstabe := false else
    Buchstabe := true;

malo 27. Jan 2005 20:37

Re: Eingabe von Buchstaben verhindern
 
Zitat:

Zitat von Aike
Delphi-Quellcode:
if Key not in CKeys then
liefert mir folgenden Fehler:
Operator oder Semikolon fehlt
Operator ist auf diesen Operandentyp nicht anwendbar

versuchs mal so:

Delphi-Quellcode:
if not key in CKeys then
:zwinker:


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