Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Abfangen von Fehleingaben (https://www.delphipraxis.net/66674-abfangen-von-fehleingaben.html)

happyaura 2. Apr 2006 14:29


Abfangen von Fehleingaben
 
Hallo,

ich möchte gerne in einem Edit-Feld Werte eingeben, und diese dann einem integer zuweisen. wie kann ich fehleingaben wie buchstaben oder ein leeres feld abfangen?
Delphi-Quellcode:
var edit : Tedit;
    i   : integer;

[...]
i=strtoint(edit.text); // gibt fehler während der Laufzeit bei falschen eingaben...
[...]

3_of_8 2. Apr 2006 14:34

Re: Abfangen von Fehleingaben
 
Das hatten wir schon oft genug:

try
//Zuweisung
except
end;

BenjaminH 2. Apr 2006 14:38

Re: Abfangen von Fehleingaben
 
Try-Except geht auch, aber Fehler garnicht erst enstehen zu lassen ist viel schöner:

Im OnKeyPress des Edits überprüfen, ob die eingegebene Taste(Key) erlaubt ist.
Falls sie nicht erlaubt ist einfach Key #0 zuweisen
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
Var Zahlen:set of Char;
begin
   Zahlen:=['1','2','3','4','5','6','7','8','9','0'];
   If not (Key in Zahlen) Then
     Key:=#0;
end;

Hawkeye219 2. Apr 2006 14:39

Re: Abfangen von Fehleingaben
 
Vielleicht suchst Du die Funktion TryStrToInt aus der Unit SysUtils?

Gruß Hawkeye

Hawkeye219 2. Apr 2006 14:41

Re: Abfangen von Fehleingaben
 
@BenjaminH:
Was ist mit negativen Zahlen? Das Vorzeichen sollte natürlich nur vorne stehen...

juergen 2. Apr 2006 14:48

Re: Abfangen von Fehleingaben
 
Hallo,
ich würde direkt auch nur die EINGABE zulassen, welche schon die gültigen Werte enthält.
Suchwort wäre hier wohl -> OnKeyPress

Codebeispiel könnte für Zahlen wie folgt aussehen:
Delphi-Quellcode:
procedure TmyProg.Integer_Edit_Press(Sender: TObject;
  var Key: Char);

  //allgemeine Sperrung von allen Zeichen ausser
  //Backspace, Enter, Minus und alle Zahlen
  if not (key in [#8, #13, #45, #48..#57]) then
    key := #0;
  begin
    key := #0;
    Windows.Beep(2000, 250);
  end;
Das ganze ins OnKeyPress-Event hinterlgen und fertig.

//Edit-> ich war zu langsam ;-)

juergen 2. Apr 2006 14:51

Re: Abfangen von Fehleingaben
 
genau, das Minuszeichenn nur am Anfang zulassen könnte so gehen:
Delphi-Quellcode:
// das Minus darf nur am Anfang benutzt werden
    if (EDIT.selstart <> 0) and (key = #45) then
      key := #0;

happyaura 2. Apr 2006 15:09

Re: Abfangen von Fehleingaben
 
vielen Dank für die antworten, die übrigen keycodes, die mir noch gefehlt haben, konnte ich über die suche finden.
Ist echt ein prima Forum hier, dreifacher daumen hoch! :hello:

happyaura 2. Apr 2006 15:18

Re: Abfangen von Fehleingaben
 
oh, ich seh gerade, dass ich einen keycode doch nicht finden konnte, den für die entfernen taste. kann mir jemand damit aushelfen?


und wo ich schon frage, noch eine frage fürs verständnis. warum wird bei
Delphi-Quellcode:
showmessage(inttostr(ord(key)));
kein key für die ganzen "sondertasten" (enter, backspace, entfernen ect...) ausgegeben?
gruß Martin

3_of_8 2. Apr 2006 15:19

Re: Abfangen von Fehleingaben
 
Weil die keinen haben. Da musst du mit OnKeyDown und den VirtualKeys arbeiten. Da kannst du die aber auch nicht abfangen.

happyaura 2. Apr 2006 15:24

Re: Abfangen von Fehleingaben
 
die kann ich nicht abfangen? also mein code hat soweit den gewünschten erfolg:
Delphi-Quellcode:
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
Var Zahlen:set of Char;
begin
   Zahlen:=['1','2','3','4','5','6','7','8','9','0',#8,#37,#39,#13];
        //zahlen + backspace, pfeil links/rechts, enter

   If not (Key in Zahlen) Then
     Key:=#0;


  if key=#13 then
  begin
    Key:=#0;
    buttonclick(button1);
  end;

end;
nur del fehlt da eben noch

3_of_8 2. Apr 2006 15:28

Re: Abfangen von Fehleingaben
 
Del kannst du nicht abfangen, weil es kein Char ist.

Genausowenig wie Return, Shift usw.

happyaura 2. Apr 2006 15:35

Re: Abfangen von Fehleingaben
 
das versteh ich noch nicht ganz. definiere ich
Zahlen:=['1','2','3','4','5','6','7','8','9','0'];
so ist in meinem editfeld es nicht möglich, die pfeiltasten oder enter(=return?) oder backspace oder ähnliches zu nutzen.

definiere ich
Zahlen:=['1','2','3','4','5','6','7','8','9','0',#8,#37,#39 ,#13];
so sind pfeil links/rechts, backspace und enter möglich.

was genau meinst Du genau mit abfangen, versteh ich dich da irgendwie falsch?

Gruß Martin

juergen 2. Apr 2006 15:44

Re: Abfangen von Fehleingaben
 
Hallo happyaura,
#37 und #39 sind nicht die Pfeiltasten sondern Prozent und das einfache Hochzeichen :gruebel:

Grüsse
Jürgen

happyaura 2. Apr 2006 15:58

Re: Abfangen von Fehleingaben
 
ups, da hab ich wohl was falsch rausgesucht...
pfeiltasten funktionieren tatsächlich auch ohne und del auch. ich frag mich gerade, warum ich das eben nicht einfach mal ausprobiert habe, vielleicht wird es langsam mal zeit für eine kleine pause.

Vielen Dank, ich glaube, es sind erst einmal alle klarheiten beseitigt. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz