Eingabe abfrage?!

Friesi

Erfahrenes Mitglied
Hallo
Ich wollte eine eingabe abfrage machen!
also wenn man in einem Editfelt buchstarben oder sonderzeichen eingibt eine fehlermeldung bekommt!
kann man ja denke mit einer if schleife machen :)

problem ist nur .. was muss ich genau machen um auf alle buchstarben und sonderzeichen zu reagieren?!

wäre nett wenn ihr antwortet :)
 
Nimm Dir am besten das OnKeyPress-Ereignis von dem TEdit. Ob die gedrückte Taste ein Buchstabe oder ein Sonderzeichen ist, kannst Du über den ASCII-Code des Zeichens abfragen. Alle ASCII-Codes über 32 sind druckbare Zeichen, alle zwischen 65 und 90 sind Grossbuchstaben, alle zwischen 97 und 122 sind Kleinbuchstaben und alle zwischen 48 und 57 sind Zahlen. Alle anderen Codes sind Sonderzeichen - wobei auch Umlaute zu Sonderzeichen zählen.

Nachtrag: Und if ist keine Schleife. ;)
 
danke :D
ja sorry weis auch nicht wie ich auf schleife kam :D
ist ja nur eine abfrage ... liegt bestimmt daran das ich gerade ne schleife gemacht hatte :)

ok probiere ich das mal!
 
mhm also soweit klappt das ganz gut :)
Problem ist nur, dass ich es nicht bei einem OnKeyPress-Ereignis machen kann!
Da das eingabefeld für mehr als nur eine Eingabe ist :)
Also wo bei einer anderen Funktion auch Buchstarben eingegeben werden dürfen!
so mein problem nun!
wenn ich nun z.b.: alle Zeichen von 0-9 erlaube und nur die Zeichen eingebe geht es! wenn ich am Anfang ein "r" und dahinter eine "5" (r5) kommt die meldung die ich will :)
Problem ist nur: wenn ich "5r" eintippe denkt sich das programm "oh 5 darf ich" und rechnet dann! aber "r" kann er schlecht berechnen :D
Wie könnte ich es denn nun machen, dass er alle zeichen die eingeben wurden (den string) "durchsucht"
 
Wie meinst Du das?
Durchsuchen kannst Du einen String mit einer Schleife:
Code:
var
  myString: String;
  i: Integer;
begin
  myString := Edit1.Text;
  for i := 1 to Length(myString) do
  begin
    ShowMessage(myString[i]);
  end;
end;
Aber eigentlich kannst Du mit dem OnKeyPress-Ereignis jeden einzelnen Tastendruck in dem Steuerelement abfangen und auswerten...
 
mhm das mit dem abfangen ist ja auch nicht das problem mit dem OnKeyPress. Doch ich hab ein Eingabefeld, ein Button und eine Radiogroup mit 6 auswahlmöglichkeiten!
Bei einer Auswahl darf man nur Ziffern von 0-9 eingeben! bei einer anderen aber auch Zeichen von A-Z + 0-9!
Und hab die abfrage dann so gemacht:

Code:
key:= (eingabe.text);
if (RadioGroup1.itemindex=0) then
begin
  if (Key > #47) and (Key < #58) then
    begin
     //die Verarbeitung
    end
else
  MessageDlg('Sie dürfen nur Ziffern von 0-9 verwenden!', mtError, mbOk],0);
end;

Und das geht dann weiter so mit:
if (RadioGroup1.itemindex=1) ...


Nur wenn man dann
z.b. ins eingabefeld "0B" eingibt rechnet er trotzdem los und geht nicht aufs "else"
denn er hat ja am anfang seine 0
Wenn ich "B0" eingebe kommt die Fehlermeldung!
 
Du solltest auch darauf achten, dass Key nur ein einzelnes Zeichen enthält. Das ist zwar wahrscheinlich nicht der Grund, aber ist trotzdem sauberer. Die Variable Key enthält ja sowieso schon die gedrückte Taste. ;)
Und nach dem Fehler solltest Du noch Key auf 0 setzen, damit das Zeichen nicht trotzdem übernommen wird.
Code:
case RadioGroup1.ItemIndex of
  0: begin
       if (Key > 47) and (Key < 58) then
       begin
         // Verarbeitung
       end
       else begin
         // Fehler
         Key := 0;
       end;
     end;
  1: begin
       if ((Key >= 65) and (Key <= 92)) or ((Key >= 48) and (Key <= 57)) then
       begin
         // Verarbeitung
       end
       else begin
         // Fehler
         Key := 0;
       end;
     end;
  // usw.
end;
 
mhm entweder verstehe ich das net was du nun genau meinst oder irgendwie hab ich was falsch rübergebracht *gg*

also das ist hier ein teil meines codes:
Das in der Var Key nur ein Wert stehen sollte verstehe ich ja :)
Sollte ich dann eine schleife machen die jedes Zeichen aus dem String des Editfeldes überprüft?! also da ist zurzeit mein problem :D

Code:
var zahl, c, ergebnis2 : integer;
    b, zahl2, key, ergebnis: String;
    i: extended;
    MyErrorString : string;
procedure TMainForm.Button1Click(Sender: TObject);
begin
//Key Variabel
key:= (eingabe.text);
//Fehlerabfangen wenn eingabe leer ist
if eingabe.text = '' then
begin
MessageDlg('Sie müssen eine Zahl eingeben! :)', mtError, [mbOk],0);
end
else
//Dezimal ins Dualsystem
if (RadioGroup1.itemindex=0) then
begin
  if (Key > #47) and (Key < #58) then
    begin
    //Eingabe
    zahl:= strtoint(eingabe.text);
    //Verarbeitung von Dezimal in eine Dualzahl
        while zahl > 0 do
          begin
            if (zahl mod 2) <> 0 then b := '1' + b
            else b := '0' + b;
            zahl := zahl div 2;
          end;
    //Ausgabe
        ausgabe.text:= (b);
        StatusBar1.SimpleText := 'Berechung done!';
    end
else
  MessageDlg('Sie dürfen nur Ziffern von 0-9 verwenden!', mtError, [mbOk],0);
end;

//Dual ins Dezimal

if (RadioGroup1.itemindex=2) then
begin
if (Key > #47) and (Key < #50) then
begin
    //Eingabe
         zahl2:= (eingabe.text);
         i := 0;
    //Verarbreitung
          for c := 1 to length(zahl2) do
          begin
            i := i + (StrToFloat(zahl2[ c]) * Power(2, Length(zahl2) - c));
          end;
    //Ausgabe
        ausgabe.text:= FloatToStr(i);
        StatusBar1.SimpleText := 'Berechung done!';
        end
else
  MessageDlg('Sie dürfen nur Ziffern von 0-1 verwenden!', mtError, [mbOk],0);
end;
 
Du solltest die Tasten eigentlich im OnKeyPress-Ereignis abfangen, weil die jeweils gedrückte Taste schon direkt an dieses Ereignis übergeben wird. Also musst Du den Wert für die Variable Key nicht selbst vergeben, sondern kannst damit direkt die gedrückte Taste überprüfen.
Oder wir reden gerade völlig aneinander vorbei. :rolleyes:
 
Zurück