Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi In Edit-Feld nur Zahleneingaben zulassen? (https://www.delphipraxis.net/26406-edit-feld-nur-zahleneingaben-zulassen.html)

mirko2000 23. Jul 2004 12:17


In Edit-Feld nur Zahleneingaben zulassen?
 
Ich hab schon mal etwas in google gesucht und auch was gefunden, man kann aber immer noch Sonderzeichen eingeben (Großschreibtaste drücken und die oberen Zahlentasten drücken -> !"§$%&/()=?). Wie kann ich überprüfen, ob die Shifttaste gedrückt wurde?

Delphi-Quellcode:
procedure TForm1.txtSpieltagKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  Mgs: TMsg;

  procedure EatKey;
  { Clear Keyboardbuffer / Tastaturbuffer leeren }
  begin
    PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
  end;
begin
  if not (Char(Key) in [#8, #13, #46, #48..#57,#96..#105]) then EatKey;
end;

Jonny-Flash 23. Jul 2004 12:26

Re: In Edit-Feld nur Zahleneingaben zulassen?
 
Hi mirko2000,

hatte selbst mal das Problem und hab dazu folgendes gefunden:

Diese Porcedure verhindet alle Eingaben ausser Zahlen in einem Editfeld

Delphi-Quellcode:
//Variante1:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);    
var i:integer;    
    b:boolean;    
begin    
  b:=false;    
  for i:=48 to 57 do    
  begin    
    if ord(key) =i then b:=true    
  end;    
  if b=false then key:=chr(0);    
end;   


//Variante2:

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);    
var i:integer ;    
begin    
  try    
    i:=strtoint(key);    
  except    
    key:=chr(0);    
  end;    
end;   


//Variante3:

// lässt nur Zahlen zu und die Backspacetaste    
procedure KeyPressWord(Form : TForm; Sender : TObject; var Key : Char);    
begin    
  if NOT (Key in [#08, '0'..'9']) then    
    Key := #0;    
end;    


//Variante4:


// lässt nur Zahlen mit Komma zu und die Backspacetaste    
procedure KeyPressFloat(Form : TForm; Sender : TObject; var Key : Char);    
begin    
  if Key = '.' then    
    Key := ',';    
  if NOT (Key in [#8, '0'..'9', ',']) then    
    Key := #0;    
end;    


//Zusatz:
//optional kann in die Procedure noch ein Code eingebaut werden, der den Cursor aufs nächste Feld //setzt, wenn du Enter drückst(die nächste Taborder):

  if Key = Chr(vk_Return) then    
  begin    
    Key := #0;    
    Form.Perform(wm_NextDlgCtl, 0, 0);    
  end;
Ich hoffe, das hilft dir weiter.

mirko2000 23. Jul 2004 13:01

Re: In Edit-Feld nur Zahleneingaben zulassen?
 
@Jonny-Flash: Danke, genau das hab ich gesucht!

Mir fällt jetzt aber noch auf, dass ich in das Textfeld immer noch was einfügen kann. Und zwar muss ich nur mit der rechten Maustaste in das Feld und dann auf Einfügen klicken. Kann man das auch noch irgendwie unterbinden?

[EDIT]Habs gerade durch ausprobieren herausgefunden, hat sich also erledigt![/EDIT]

franksch88 23. Jul 2004 13:32

Re: In Edit-Feld nur Zahleneingaben zulassen?
 
Kannst mal versuchen bei Edit1.OnChange mal ein Checkalgorythmus zu schreiben, so was ähnliches wie:

Code:
function TForm1.Edit1Change(Sender:TObject);
var b:byte; S:String;
begin
  S:=Edit1.Text;
  for b:=1 to Length(S) do
    if IsNotNumber(S[b]) then S:='';
  Edit1.Text:=S;
end;
Die jeweilige Funktion IsNotNumber kannst du nach deine Regeln herstellen, oder vom KeyPress entziehen.

Hansa 23. Jul 2004 13:37

Re: In Edit-Feld nur Zahleneingaben zulassen?
 
Zitat:

Zitat von mirko2000
[EDIT]Habs gerade durch ausprobieren herausgefunden, hat sich also erledigt![/EDIT]

Ja toll. Und wie geht das ?

mirko2000 23. Jul 2004 16:19

Re: In Edit-Feld nur Zahleneingaben zulassen?
 
Zitat:

Zitat von Hansa
Zitat:

Zitat von mirko2000
[EDIT]Habs gerade durch ausprobieren herausgefunden, hat sich also erledigt![/EDIT]

Ja toll. Und wie geht das ?

Auf das Textfeld das "OnContextPopup"-Ereignis erstellen und in dieser Prozedur einfach
Delphi-Quellcode:
  Handled := true;
reinschreiben.


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