Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Nur Zahlen in SpinEdit1Change-Feld zulassen
kandesbunzler - Do 05.08.21 14:21
Titel: Nur Zahlen in SpinEdit1Change-Feld zulassen
Hallo,
ich möchte in einem SpinEdit1Change-Feld nur Zahlen zulassen.
Dies soll sowohl für Direkteingaben als auch für Copy&Paste-Aktionen gelten.
Da es sich um ein SpinEdit-Feld handelt, kann man, soweit ich weiß, bspw. TMask nicht verwenden.
Danke und vG!
Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Sa 07.08.2021 um 09:29
galagher - Do 05.08.21 17:50
kandesbunzler hat folgendes geschrieben : |
ich möchte in einem SpinEdit1Change-Feld nur Zahlen zulassen. |
Hallo!
Mein erster Gedanke war: Ein SpinEdit lässt doch ohnehin nur Zahlen zu! Aber auch das Komma-Zeichen (
FormatSettings.DecimalSeparator) kann eingefügt werden. (Seltsam, handelt es sich doch um Integer!)
Jedes Zeichen entfernen, das keine Zahl ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.SpinEdit1Change(Sender: TObject); const aCharSet: TSysCharSet = ['0'..'9']; var i, t: Integer; begin for i := Length(SpinEdit1.Text) downto 1 do begin if not CharInSet(SpinEdit1.Text[i], aCharSet) then begin t := SpinEdit1.SelStart; SpinEdit1.Text := StringReplace(SpinEdit1.Text, SpinEdit1.Text[i], '', []); SpinEdit1.SelStart := t; end; end; end; |
Einfügen per Tastatur behandeln:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.SpinEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ssShift in Shift) and (Key = VK_INSERT) then Key := 0; end; |
Für das Einfügen per PopupMenü funktioniert
SpinEdit1Change grundsätzlich, allerdings wird das Caret da jeweils um ein Zeichen nach rechts gesetzt. Kannst das ja noch anpassen!
jaenicke - Do 05.08.21 20:28
Ich halte das schlicht für einen Fehler in TSpinEdit, dass der Dezimalseparator explizit erlaubt ist (siehe IsValidChar).
Ich würde die virtuelle Methode IsValidChar in der VMT der Klasse TSpinEdit umbiegen auf eine eigene Methode, die beim Dezimalseparator dann False statt True zurück liefert und sonst die Standardmethode aufruft. Dann ist das für alle TSpinEdit Komponenten direkt korrigiert.
Alternativ kannst du natürlich auch eine eigene Komponente davon ableiten und die Methode überschreiben.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!