![]() |
Editfelder für Buchstaben sperren
Hallo,
ich suche (mal wieder für den Taschenrechner :lol: ) einen Code, der Editfelder für Buchstaben und Sonderzeichen sperrt, denn wenn ich zB 'kk'+'kk' "rechne" kommt der Fehler "'kk' ist kein gültiger Gleitkommawert". Dies möchte ich verhindern, oder evtl. sogar so Programmieren, dass sich ein eigenes Popupfeld öffnet mit dem Text "Kann man mit Buchstaben rechnen? Depp!", oder einfach nur in nem Label "Rechnen mit Buchstaben geht nicht wirklich" erscheint. Wär cool, wenn ihr mir helfen könntet. Danke schon mal! mfG Max PS: Kennt ihr ein nützliches Programm an dem man programmieren üben kann?(Wie zB der Taschenrechner). |
Re: Editfelder für Buchstaben sperren
TMaskEdit oder mit Eventbehandlungsroutine auf falsche Eingabe reagieren.
|
Re: Editfelder für Buchstaben sperren
Das haben wir schon so oft hier besprochen. Einfach mal die Suche bemühen.
|
Re: Editfelder für Buchstaben sperren
Hi
@mkinzler: Ich versteh nur Bahnhof, sorry @Luckie: ich hab nach editfeld buchstaben sperren gesucht, aber nichts gefunden. Wonach muss ich suchen? Danke! mfG Max |
Re: Editfelder für Buchstaben sperren
Hm,
ich habe eingegeben: keine buchstaben zulassen! Da kommen schon x Taschenrechner-Threads hervor! |
Re: Editfelder für Buchstaben sperren
danke!
|
Re: Editfelder für Buchstaben sperren
Ich mach das immer so:
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject); //Diese Prozedur als OnChange um Copy/Paste zu verhindern
var i: Integer; begin for i:= 1 to length(Edit1.Text) do begin if not (Edit1.Text[i] in ['0'..'9']) then begin Edit1.Text:= ''; break; end; end; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); //Das hier im OnKeyPress fängt alles ab was keine Zahl is begin if not (Key in ['0'..'9']) then Key:= #0; end; |
Re: Editfelder für Buchstaben sperren
Zitat:
Das mit dem Event hat paritycheck genauer beschrieben. |
Re: Editfelder für Buchstaben sperren
Hallo,
was ist hier Falsch:
Delphi-Quellcode:
mfG naudoc
procedure TForm1.Edit1Change(Sender: TObject);
var a,b,c:real; begin if ((edit1.text=floattostr(a)) or (edit1.text='-'+floattostr(a)+'') or (edit1.text='0') or (edit1.text='')) and ((edit2.text=floattostr(b)) or (edit2.text='-'+floattostr(b)+'') or (edit2.text='0') or (edit2.text='')) and ((edit3.text=floattostr(c)) or (edit3.text='-'+floattostr(c)+'') or (edit3.text='0') or (edit3.text='')) then |
Re: Editfelder für Buchstaben sperren
Zitat:
Zitat:
|
Re: Editfelder für Buchstaben sperren
Zitat:
Sorry, den konnte ich mir echt nicht verkneifen :angel: |
Re: Editfelder für Buchstaben sperren
Zitat:
|
Re: Editfelder für Buchstaben sperren
Hi,
so solls aussehen.
Delphi-Quellcode:
Es soll erreicht werden, das sich ein Labelfeld nur verändert, wenn das Editfeld eine Zahl, oder leer ist...
procedure TForm1.Edit1Change(Sender: TObject);
var a,b,c:real; begin a:=strtofloat(edit1.Text); b:=strtofloat(edit2.Text); c:=strtofloat(edit3.Text); if ((edit1.text=floattostr(a)) or (edit1.text='-'+floattostr(a)+'') or (edit1.text='0') or (edit1.text='')) and ((edit2.text=floattostr(b)) or (edit2.text='-'+floattostr(b)+'') or (edit2.text='0') or (edit2.text='')) and ((edit3.text=floattostr(c)) or (edit3.text='-'+floattostr(c)+'') or (edit3.text='0') or (edit3.text='')) then mfG |
Re: Editfelder für Buchstaben sperren
Hallo Max,
durch das ständige Umwandeln zwischen String und Float erreichst du nicht das von dir gewünschte Verhalten. So wird z.B. die Eingabe '1E4' durch StrToFloat in den Wert 10000 umgewandelt, die Anwendung von FloatToStr auf diesen Wert führt dann aber nicht zum ursprünglichen Eingabestring. Auch die (versuchte) Berücksichtigung des Vorzeichens ist nicht richtig. Vielleicht ist der folgende Code ja das, was du suchst:
Delphi-Quellcode:
Gruß Hawkeye
procedure TForm1.Edit1Change (Sender: TObject);
function CheckEdit (aEdit: TEdit): Boolean; var Dummy : Double; begin Result := (aEdit.Text = '') or TryStrToFloat(aEdit.Text, Dummy); end; begin if CheckEdit(Edit1) and CheckEdit(Edit2) and CheckEdit(Edit3) then ... end; |
Re: Editfelder für Buchstaben sperren
Sorry, aber ich versteh nicht wie die Funktion funktioniert, deshalb kann ich sie nicht anwenden...
Weiss nicht was an welche Stelle kommt, und warum... Danke trotzdem! mfg naudoc |
Re: Editfelder für Buchstaben sperren
Erm, lol?
Da gibts doch nicht viel zu verstehen. Eine bestimmte Aktion wird ausgeführt, wenn die zu überprüfenden Edits entweder leer sind oder gültige Zahlenwerte enthalten. |
Re: Editfelder für Buchstaben sperren
Hallo,
so kann man ja nicht mal mit der Taste über Enter löschen, aber 3,,,4--4,,, usw kann eingegeben werden...
Delphi-Quellcode:
Geht das nicht noch etwas besser?
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); //Das hier im OnKeyPress fängt alles ab was keine Zahl is
begin if not (Key in ['0'..'9']) then Key:= #0; end; mfG naudoc |
Re: Editfelder für Buchstaben sperren
Hallo,
Zitat:
was ist Dummy, was ist Double, wie funktioniert CheckEdit? :gruebel: Könntest du das mal programmieren für die variablen a und b, wenn a+b gerechnet werden soll?(Ergebnis soll c sein, und die Editfelder Edit1, Edit2 und Edit3) Wär vielleicht hilfreich... Danke! :thumb: Naudoc |
Re: Editfelder für Buchstaben sperren
Aaalso...
Double ist einfach ein Gleitkommatyp, also eine Zahl mit Nachkommastellen. Dummy ist eine Variable, die man einfach braucht, um sie als var-Parameter an die Funktion TryStrToInt zu übergeben. Wenn du jetzt die Zahlenwerte von edit1 und edit2 addieren willst, geht das so:
Delphi-Quellcode:
Das bedeutet, dass versucht wird, die Zahlenwerte der beiden Edits zu addieren. Wenn ein Edit keine Zahl enthält, wird der Wert als 0 angenommen.
showmessage(inttostr(strtointdef(edit1.text, 0)+strtointdef(edit2.text, 0)));
Delphi-Quellcode:
Das bedeutet, dass die Zahlenwerte der Edits addiert werden, wenn sie gültig sind. Ansonsten wird eine Fehlermeldung ausgegeben.
var a, b: Integer;
begin if not (trystrtoint(edit1.text, a) and trystrtoint(edit1.text, b)) then showmessage('Bitte geben sie gültige Zahlenwerte ein.') else showmessage(inttostr(a+b)); end; CheckEdit rufst du am besten in OnChange auf und machst dann irgendne Spielerei wie das Edit rot färben, wenn es keinen gültigen Wert enthält. |
Re: Editfelder für Buchstaben sperren
Zitat:
|
Re: Editfelder für Buchstaben sperren
Zitat:
mfG PS: @3_of_8: Danke, ich werds versuchen... ;) |
Re: Editfelder für Buchstaben sperren
zum Löschen der Zeichen noch ein #8 in die Auflistung.
Grüße Klaus |
Re: Editfelder für Buchstaben sperren
Zitat:
Wenn ich es genau so mache, bekomme ich in dem PopUp immer die Zahl die in Edit1 steht, ist dort ein Buchstabe, dann Word 0 angezeigt. Die Fehlermeldung kommt nie... Und: Geht das ganze auch mit 'real'-Zahlen? und mit...tofloat und floatto... ? mfG PS: ich probier jetzt deine 1. Lösung... Edit: Danke Klaus! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:26 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 by Thomas Breitkreuz