![]() |
Überprüfen, ob Variable einem gewissen Typ entspricht
:-D Hallo
Ich habe folgendes Problem: Ich programmiere einen Taschenrechner. Wie kann ich es unterbinden, dass der Benutzer mehrmals die Kommataste drücken darf. Ich dachte da an eine Art überprüfung:
Delphi-Quellcode:
Aber wahrscheinlich geht das so nicht. Auf den Punkt gebracht, möchte ich die Eingabe in Edit1 auf ein Komma überprüfen, und nur wenn keines vorhanden ist, darf der User die Kommataste drücken.
If edit1.text = real then....
Hat jemand einen Denkanstoß ? Danke :stupid: |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Es gibt mehrere Möglichkeiten: Ich denke da an val(hat einen Fehlerparameter) und TryStrToFloat, außerdem natürlich die unsaubere Variante mit try..except.
Hoffe geholfen zu haben Apollonius |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
:shock:
Da ich Delphi-Anfänger bin, glaube ich, dass ich noch nicht weiter bin. Ich habe mir
Delphi-Quellcode:
und
TryStrToFloat
Delphi-Quellcode:
mal in der Hilfe angesehen, aber geht es dabei nicht eher darum, Eingabefehler des Users so umzuändern, dass ich brauchbar damit rechnen kann ?
val
Ich suche aber eine Möglichkeit, die es gänzlich dem User untersagt, eine falsche Eingabe zu tätigen. Vielleicht wäre auch einfach ein simples Beispiel für mich möglich ?? danke :mrgreen: |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Du versuchst einfach, die Benutzereingabe mit TryStrToFloat in einen Float umzuwandeln. Wenn die Funktion false zurückgibt, weißt du, dass die Benutzereingabe ungültig ist. Dann kannst du z.B. eine Messagebox zeigen lassen.
Wenn du ständig überprüfen willst, dann solltest du obige Testroutine in das onChange deines Edits schreiben. |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Hi,
Wie wärs damit?
Delphi-Quellcode:
Das find ich einfacher als TryStrToFloat oder so.
if pos(',',Edit1.Text) = 0 then
ManDarfKommaSetzen; Gruß Neutral General |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
du könntest bei jedem onKeyPress des Edits schauen ob schon ein ',' vorhanden ist (zB mit Pos), wenn ja einfach key := #0 setzen
|
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Zitat:
|
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
*grummel*
Aber damit ignoriert man die Einstellung für den DecimalSeparator, und außerdem kann man mit TryStrToFloat auch gleich in einem Aufwasch die Überprüfung machen, dass nur Zahlen vorkommen. Wie arbeitet denn der Taschenrechner? Schreibt man alles in eine Zeile (3+5*6) oder gibt man erst eine Zahl ein, bei Eingabe eine Rechenzeichens wird das Edit gelöscht, nächste Zahl... Bei ersterer Methode ist TryStrToFloat nämlich hinfällig, die Überprüfung auf mehrere Kommata aber auch :lol: |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Zitat:
allerdings geht ja noch
Delphi-Quellcode:
if (key = ',') and (Pos(',', Edit1.Text) <> 0) then
key := #0; |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
das geht. Allerdings sollte man beachten das man auch per "Strg + V" und per Kontextmenü dinge aus der zwischenablage einfügen kann und das sollte man dann im OnChange korrigieren.
|
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Danke für eure zahlreichen Antworten. Ich werde gleich mal ein bissl rumprobieren. Die Eingabe ist zu 100 % über Buttons geregelt. Der Taschenrechner hat das selbe Layout, wie der Standartrechner von Windows...
Kannst du mal die Anwendung von
Delphi-Quellcode:
an einem Beispiel zeigen ?
TryStrToFloat
|
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Zitat:
Bei Fließkommazahlen ist eine sofortige Validierung und entsprechende Fehlermeldung/Anpassung einfach unmöglich, weshalb ich sie vollständig auf den Zeitpunkt nach der Eingabe (Fokusverlust, Button-Klick, ...) verlagern würde (dann würde ich wirklich TryStrToFloat empfehlen ;) ). |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Hm. Hast recht. Aber wenn die Überprüfung wirklich erst im onExit oder ButtonClick ist, dann geht es (wie du gesagt hast).
|
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Dachte nicht, dass dieses Thema so unterschiedliche Umsetzungsvarianten zur Verfügung stellt :lol:
Da ich aber erst ca. 3 wochen Delphierfahrung habe, würde ich mich über ein konkretes Beispiel mit der
Delphi-Quellcode:
freuen....
TryStrToFloat-Anweisung
|
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Delphi-Quellcode:
Der Text der MessageBox ist natürlich nach Belieben :-D
procedure TForm1.EingabePruefen;
var h:float; begin if not TryStrToFloat(edit1.text,h) then begin showmessage('Sie Schuft! Geben Sie gefälligst eine gültige Fließkommazahl ein!'); edit1.text:=''; end; end; |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
So sieht es bei mir im Code aus:
Delphi-Quellcode:
Nun zu meinem Problem. Es arbeitet alles einwandfrei, aber erst ab dem 3. Kommata :|
procedure TForm1.Button15Click(Sender: TObject);
var h:double; begin if TryStrToFloat(edit1.Text,h) then edit1.Text:=edit1.text+',' else begin showmessage('Sie haben schon ein Kommata'); edit1.Text:=' '; end; end; Beispiel: Der User kann eingeben... 2,2,3, erst beim rotem Kommata erscheint die Fehlermeldung. Die Fehlermeldung soll aber schon beim 2. Komma erscheinen :angel2: |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Bei welcher Gelegenheit wird dieser Button denn geklickt? Um ein Komma zu setzen? Das funktioniert nicht, du darfst erst ganz am Ende, wenn die Zahl komplett sein soll, prüfen.
|
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Liste der Anhänge anzeigen (Anzahl: 1)
Mh, ich glaube, ich muss ein bissl besser erklären...
Also, der Rechner besteht aus einem edit1, welches readOnly=true gesetzt ist. Die Eingabe der Zahlen erfolgt über 9 Buttons. Weitere 4 Buttons für die Rechenarten und 1 Button für das Kommata. Nun soll der Benutzer über die Buttons seine Zahlen eingeben. Wenn er dann z.B. die Zahl 1,2,3 eingibt(indem er auf den Kommata-Button drückt), soll schon beim 2. Kommata die Meldung erscheinen, das dies nicht möglich ist. Wie kann ich das realisieren ? Im Anhang ist ein ScreenShot vom Rechner... Ah, und warum lässt sich die Farbe der Zahlen auf den Butten eigentlich nicht verändern ? |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Wenn du das so machen willst, ist es mit trystrtofloat nicht möglich, du solltest pos verwenden, um zu prüfen, ob schon ein Komma da ist. TryStrToFloat geht nur dann, wenn die Zahl schon vollständig vorliegt.
Die Einzahl von Kommata lautet übrigens Komma :???: |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Wenn du das rein mit Buttons machst kannst du natürlich auch einfach eine Zählvariable mit dem Komma Button koppeln.
Also wenn der Button geklickt wird erhöhst du die variable um 1 und prüfst bei jedem klick auf den button auch ob die variable schon erhöht wurde oder nicht. Nur wenn nicht wird ein Komma geschrieben. Wenn eine Operationstaste Taste wie +,-,*,\,sqrt usw... gedrückt wird setzt du die variable zurück. Als Code könnte ich mir so etwas denken:
Delphi-Quellcode:
Willnix
procedure TForm1.KommaButton1Click(Sender: TObject);
begin if KommaCount < 1 then begin Edit1.Text := Edit1.Text+','; inc(KommaCount); end else begin ShowMessage('Ähäm.. Nur EIN Komma!'); end; end; procedure TForm1.OperationsButton2Click(Sender: TObject); begin KommaCount := 0; end; procedure TForm1.FormCreate(Sender: TObject); begin KommaCount := 0; end; |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
:lol:
Vielen Dank willnix :???: Deine Variante funktioniert und gefällt mir am besten. tschüssi.. |
Re: Überprüfen, ob Variable einem gewissen Typ entspricht
Kein Ding, immer gerne, viel Spaß noch. :mrgreen:
Willnix |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 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