EditFeld nur bestimmte Werte zulassen
Hallo,
ich möchte dass man in dem EditFeld nur Zahlen und Kommas eingeben darf und keine Buchstaben. Vielen Dank. |
Re: EditFeld nur bestimmte Werte zulassen
TMaskEdit bzw. NumbersOnly Eigenschaft in neueren Delphiversionen oder im KeyDown-Event selber abprüfen.
|
Re: EditFeld nur bestimmte Werte zulassen
Also ich besitze D7 und bin noch ein totaler Anfänger in Delphi, ich wüsste nicht einmal wie man eine Schleife macht die die ganze Zeit überprüft ob man nicht doch etwas anderes eingibt.
|
Re: EditFeld nur bestimmte Werte zulassen
Dann nimm einen TMaskEdit, da kannst du eine Editmaske vorgeben
|
Re: EditFeld nur bestimmte Werte zulassen
Ich kann das bei den Eigenschaften nicht sehen und ich wüßte nich wie ich das sonst anwenden können außer eine Schleife zu verwenden.
|
Re: EditFeld nur bestimmte Werte zulassen
Das ist eine eigene Komponente. Die genannte Eigenschaft (NumbersOnly) ist von TEdit bei Delphi ab D11(?)
|
Re: EditFeld nur bestimmte Werte zulassen
Wenns möglich ist würde ich gerne eine andere Möglichkeit in betracht ziehen, da ich AlphaLite verwende und dort diese Komponente nicht vorhanden ist.
|
Re: EditFeld nur bestimmte Werte zulassen
Dann musst du wie gesagt, bei jedem Tastendruck ermittlen, ob die Eingabe angenommen werden soll oder nicht
|
Re: EditFeld nur bestimmte Werte zulassen
Da bin ich überfragt, ich weiß weder wie man eine Schleife erstellt noch wie man einen Tastendruck erkennt. Aber ich lerne gerne dazu^^.
|
Re: EditFeld nur bestimmte Werte zulassen
Hallo,
du kannst das Event OnKeyPress benutzen und falls das Zeichen nicht erlaubt ist, dann Key einfach auf #0 setzen.
Delphi-Quellcode:
Evtl musst du noch abprüfen, ob das Komma nur einmal im Text ist.
procedure TForm1.DoOnEdit1KeyDown(Sender: TObject; var Key: Char);
begin if not (Key in ['0'..'9', ',', #8]) then // #8 ist die Backspace Taste Key := #0; end; Ciao Chris |
Re: EditFeld nur bestimmte Werte zulassen
Vielen Dank, das hat schon mal geklappt. Was ich nicht weiß ist wie ich das mit dem Komma mache dass es nur einmal geht. Bei einem Button wüsste ich das aber bei einer Taste nicht. Vielen Dank.
|
Re: EditFeld nur bestimmte Werte zulassen
Delphi-Quellcode:
[ungetestet]
procedure TForm1.DoOnEdit1KeyDown(Sender: TObject; var Key: Char);
begin if not (Key in ['0'..'9', ',', #8]) then // #8 ist die Backspace Taste Key := #0; if (key = ',') and (pos(',',(sender as TEdit).text) >0) then key := #0; end; Grüße Klaus |
Re: EditFeld nur bestimmte Werte zulassen
Nicht zu vergessen, dass das Komma weder an erster noch an letzter Stelle stehen darf ;)
Es sei denn natürlich, man fügt für diesen Fall dann vorne oder hinten noch eine 0 ein ;) |
Re: EditFeld nur bestimmte Werte zulassen
Ich möchte nur einmal anmerken, dass ein ungültiger Text über das Einfügen aus der Zwischenablage so weiterhin möglich ist. Evtl. sollte man die Prüfung ins OnChange-Ereignis verlagern.
|
Re: EditFeld nur bestimmte Werte zulassen
Vielen Dank, das hat geklappt, jetzt wollte ich das gleiche mit meinem Kommabutton machen(mache gerade ein Taschenrechner), aber das wollte nicht so ganz hinhauen. Wie müsste ich es da denn machen?
Edit: Das ist mir gerade aufgefallen, wie überprüfe ich die Stelle des Kommas? |
Re: EditFeld nur bestimmte Werte zulassen
Zitat:
|
Re: EditFeld nur bestimmte Werte zulassen
Nein, dass man mehrere Kommas pro Eingabe eingeben kann.
|
Re: EditFeld nur bestimmte Werte zulassen
Zitat:
|
Re: EditFeld nur bestimmte Werte zulassen
Eigeninitiative scheint ihm verboten worden zu sein
|
Re: EditFeld nur bestimmte Werte zulassen
Zitat:
|
Re: EditFeld nur bestimmte Werte zulassen
Zitat:
|
Re: EditFeld nur bestimmte Werte zulassen
Also, ich bin ein totaler Anfänger von daher Entschuldigung wenn ich nicht alles hinbekomme, ich habe geschrieben, dass ich es versucht habe es aber nicht geklappt hat. Ich habe es bisher so gemacht, vllt ein bisschen unproffesionell aber ich bin ja noch ein Anfänger.
Delphi-Quellcode:
Ich hatte es bisher mit einer Variablen überprüfen lassen, allerdings kann ich jetzt einmal mit der Tastatur ein Komma setzen und einmal per Mausklick, das will ich verhindern.
procedure TForm1.KommaClick(Sender: TObject);
begin if Kom=0 then sEdit1.Text:=sEdit1.Text+','; Kom:=1; end; |
Re: EditFeld nur bestimmte Werte zulassen
Du musst doch nur in beiden Ereignissen Deine Variable prüfen.
|
Re: EditFeld nur bestimmte Werte zulassen
Das hat wieso auch immer nicht funktioniert.
Delphi-Quellcode:
if (key = ',') and (pos(',',(sender as TEdit).text) >0) and (Kom=0) then
key := #0;; |
Re: EditFeld nur bestimmte Werte zulassen
es müsste (kom>0) heissen
|
Re: EditFeld nur bestimmte Werte zulassen
Zitat:
|
Re: EditFeld nur bestimmte Werte zulassen
DeddyH meinte ich soll es so versuchen. >0 hat auch nichts gebracht. Ich fände es sehr nett von euch wenn ihr mir wenigstens einmal zeigen würdet wie man dass ohne Variable abprüft ob schon ein Komma vorhanden ist und dass man dann keins mehr hinzufügen kann. Vielen Dank.
|
Re: EditFeld nur bestimmte Werte zulassen
Ich hab gemeint, dass Du Deine Variable in beiden Ereignissen prüfen bzw. setzen sollst. Pseudocode:
Code:
Wenn Zeichen ','
Wenn Variable > 0 Zeichen verwerfen Sonst Zeichen setzen Variable auf 1 setzen |
Re: EditFeld nur bestimmte Werte zulassen
Das hatte ich auch ausprobiert, da gabs soweit ich mich erinnern konnte aber Probleme, jetzt scheint es aber zu funktionieren, vielen Dank.
|
Re: EditFeld nur bestimmte Werte zulassen
Im Zweifelsfall hilft bei logischen Problemen immer ein PAP bzw. ein Struktogramm.
|
Re: EditFeld nur bestimmte Werte zulassen
Wie ist der KeyCode für Enter?
Und vielen Dank für deine guten Tipps Deddy. [edit]Habs selber rausgefunden.[/edit] |
Re: EditFeld nur bestimmte Werte zulassen
VK_RETURN
|
Re: EditFeld nur bestimmte Werte zulassen
#13 funktioniert auch, trotzdem danke.
|
Re: EditFeld nur bestimmte Werte zulassen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:12 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