Editfeld mit Zahlen
-
- Beiträge: 67
- Registriert: So 17. Okt 2021, 17:18
- OS, Lazarus, FPC: Windows 7
- CPU-Target: X86
- Wohnort: Allgäu
Editfeld mit Zahlen
ich möchte in einem Editfeld nur Zahlen eingeben können. Alles andere soll überhaupt nicht angenommen werden, außer natürlich RETURN. Ich probiere jetzt schon eine ganze Weile mit OnKeyDown herum, aber so langsam habe ich den Verdacht, da gibt es bei Lazarus eine viel elegantere Möglichkeit. Früher gab es mal MaskEdit, aber das scheint es nicht mehr zu geben.
Re: Editfeld mit Zahlen
Was meinst du damit?Adenos hat geschrieben: Fr 24. Dez 2021, 09:45 Früher gab es mal MaskEdit, aber das scheint es nicht mehr zu geben.
Wieso soll es das nicht mehr geben?
https://wiki.freepascal.org/TMaskEdit
-
- Beiträge: 67
- Registriert: So 17. Okt 2021, 17:18
- OS, Lazarus, FPC: Windows 7
- CPU-Target: X86
- Wohnort: Allgäu
Re: Editfeld mit Zahlen
oh, Entschuldigung. Das habe ich nicht gesehen. Vielen Dank.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Editfeld mit Zahlen
Hi!
MaskEdit finde ich furchtbar. Geht aber auch ohne:
Viele bunte Eier wünscht
Winni
MaskEdit finde ich furchtbar. Geht aber auch ohne:
Code: Alles auswählen
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if NOT (key in [VK_0..VK_9,VK_RETURN,VK_DELETE,VK_BACK ] ) then key := 0;
end;
Winni
- Ally
- Beiträge: 280
- Registriert: Do 11. Jun 2009, 09:25
- OS, Lazarus, FPC: Win und Lazarus Stable release
- CPU-Target: x64
Re: Editfeld mit Zahlen
Hallo,
schau dir doch mal mein RhsPack im Online-Package-Manager an.
Das Package enthält zwei Komponenten zur Eingabe von Zahlen.
Hier die Beschreibung dazu:
--------------------------------------------------------------------------------------------------------------------------
DecimalNumberEdit ist eine Komponente für die Eingabe von Zahlen.
--------------------------------------------------------------------------------------------------------------------------
Das Eingabefeld akzeptiert nur gültige Zahlen, die über die Eigenschaft Matrix eingegrenzt werden können.
Die Komponente stellt vier neue Eigenschaften zur Verfügung.
1. Matrix (String)
Über diese Eigenschaft wird das Zahlenformat definiert.
Beispiele:
99,99 Erlaubt die Eingabe von Werten im Bereich von 0 bis 99,99 mit zwei Dezimalstellen.
-50,9 Erlaubt die Eingabe von Werten im Bereich von -50,9 bis 50,9 mit einer Dezimalstelle.
250,000 Erlaubt die Eingabe von Werten im Bereich von 0 bis 250 mit drei Dezimalstellen.
-500 Erlaubt die Eingabe von Werten im Bereich von -500 bis 500 ohne Dezimalstellen.
2. Value (Extended)
Liefert den Extendedwert des eingegebenen Wertes zurück.
Dieser Wert kann während der Eingabe ausgewertet werden und repräsentiert den im Eingabefeld aktuell eingegebenen Wert.
3. EnterKey (Boolean)
Gestattet den Einsatz der Entertaste analog zur Tab-Taste.
4. WarningTone (Boolean)
Gibt einen Warnton aus, wenn unzulässige Eingaben gemacht werden.
Unter Windows werden die Lokalisierungseinstellungen wie z.B. der DecimalSeparator automatisch übernommen.
Soll das Projekt auch unter Linux / Unix die Lokalisierungseinstellungen verwenden,
sollte man den Projekt-Uses den Eintrag clocale hinzufügen.
Beispiel:
uses
{$IFDEF UNIX}{$IFNDEF DARWIN}
clocale, // Setzt die Lokalisierungseinstellungen (Zahlen-, Datums- und Zeit-Formate)
{$ENDIF}{$ENDIF}
SysUtils, Forms, ......
--------------------------------------------------------------------------------------------------------------------------
NumberEdit ist eine Komponente für die Eingabe von ganzen Zahlen.
--------------------------------------------------------------------------------------------------------------------------
Das Eingabefeld akzeptiert nur die Ziffern 0-9, wobei auch führende Nullen zulässig sind.
Die Komponente stellt zwei neue Eigenschaften zur Verfügung.
1. EnterKey (Boolean)
Gestattet den Einsatz der Entertaste analog zur Tab-Taste.
2. WarningTone (Boolean)
Gibt einen Warnton aus, wenn unzulässige Eingaben gemacht werden.
schau dir doch mal mein RhsPack im Online-Package-Manager an.
Das Package enthält zwei Komponenten zur Eingabe von Zahlen.
Hier die Beschreibung dazu:
--------------------------------------------------------------------------------------------------------------------------
DecimalNumberEdit ist eine Komponente für die Eingabe von Zahlen.
--------------------------------------------------------------------------------------------------------------------------
Das Eingabefeld akzeptiert nur gültige Zahlen, die über die Eigenschaft Matrix eingegrenzt werden können.
Die Komponente stellt vier neue Eigenschaften zur Verfügung.
1. Matrix (String)
Über diese Eigenschaft wird das Zahlenformat definiert.
Beispiele:
99,99 Erlaubt die Eingabe von Werten im Bereich von 0 bis 99,99 mit zwei Dezimalstellen.
-50,9 Erlaubt die Eingabe von Werten im Bereich von -50,9 bis 50,9 mit einer Dezimalstelle.
250,000 Erlaubt die Eingabe von Werten im Bereich von 0 bis 250 mit drei Dezimalstellen.
-500 Erlaubt die Eingabe von Werten im Bereich von -500 bis 500 ohne Dezimalstellen.
2. Value (Extended)
Liefert den Extendedwert des eingegebenen Wertes zurück.
Dieser Wert kann während der Eingabe ausgewertet werden und repräsentiert den im Eingabefeld aktuell eingegebenen Wert.
3. EnterKey (Boolean)
Gestattet den Einsatz der Entertaste analog zur Tab-Taste.
4. WarningTone (Boolean)
Gibt einen Warnton aus, wenn unzulässige Eingaben gemacht werden.
Unter Windows werden die Lokalisierungseinstellungen wie z.B. der DecimalSeparator automatisch übernommen.
Soll das Projekt auch unter Linux / Unix die Lokalisierungseinstellungen verwenden,
sollte man den Projekt-Uses den Eintrag clocale hinzufügen.
Beispiel:
uses
{$IFDEF UNIX}{$IFNDEF DARWIN}
clocale, // Setzt die Lokalisierungseinstellungen (Zahlen-, Datums- und Zeit-Formate)
{$ENDIF}{$ENDIF}
SysUtils, Forms, ......
--------------------------------------------------------------------------------------------------------------------------
NumberEdit ist eine Komponente für die Eingabe von ganzen Zahlen.
--------------------------------------------------------------------------------------------------------------------------
Das Eingabefeld akzeptiert nur die Ziffern 0-9, wobei auch führende Nullen zulässig sind.
Die Komponente stellt zwei neue Eigenschaften zur Verfügung.
1. EnterKey (Boolean)
Gestattet den Einsatz der Entertaste analog zur Tab-Taste.
2. WarningTone (Boolean)
Gibt einen Warnton aus, wenn unzulässige Eingaben gemacht werden.
- gladio
- Beiträge: 223
- Registriert: Sa 21. Jun 2014, 06:15
- OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Editfeld mit Zahlen
Falls es nur um einfache ganze Zahlen geht, gibt es die Eigenschaft NumbersOnly (true/false) für TEdit.
Hat aber Probleme mit Vorzeichen und Komma.
Hat aber Probleme mit Vorzeichen und Komma.
Re: Editfeld mit Zahlen
Oder nimm die standardmäßig vorhandenen TSpinEdit, TFloatSpinEdit auf der "Misc"-Palette, oder TSpinEditEx, TFloatSpinEditEx auf der "LazControls"-Palette. Letztere haben auch den Vorteil, dass man die Up/Down-Buttons ausblenden kann (UpDownVisible := false), so dass sich die Controls visuell nicht von TEdit unterscheiden.
-
- Beiträge: 67
- Registriert: So 17. Okt 2021, 17:18
- OS, Lazarus, FPC: Windows 7
- CPU-Target: X86
- Wohnort: Allgäu
Re: Editfeld mit Zahlen
ja, vielen Dank. Das finde ich auch viel besser.Winni hat geschrieben: Fr 24. Dez 2021, 10:16 MaskEdit finde ich furchtbar. Geht aber auch ohne:Code: Alles auswählen
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if NOT (key in [VK_0..VK_9,VK_RETURN,VK_DELETE,VK_BACK ] ) then key := 0; end;
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Editfeld mit Zahlen
Hi,
ich verwende auch gern mal "strtointdef".
https://www.freepascal.org/docs-html/rt ... ntdef.html
Viele Grüße
Bernd
ich verwende auch gern mal "strtointdef".
https://www.freepascal.org/docs-html/rt ... ntdef.html
Viele Grüße
Bernd
-
- Beiträge: 954
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Editfeld mit Zahlen
Aber das verhindert nicht, dass der Nutzer ungültige Zeichen eingeben kann. Es ist vom Standpunkt der Nutzbarkeit sinnvoller dies schon von vornherein zu verhindern.wennerer hat geschrieben: Fr 24. Dez 2021, 12:37 ich verwende auch gern mal "strtointdef".
https://www.freepascal.org/docs-html/rt ... ntdef.html
FPC Compiler Entwickler
-
- Beiträge: 67
- Registriert: So 17. Okt 2021, 17:18
- OS, Lazarus, FPC: Windows 7
- CPU-Target: X86
- Wohnort: Allgäu
Re: Editfeld mit Zahlen
welche Tastencodes haben denn die Zahlen auf dem rechten Zahlenfeld? Ich habe es mit VK_NUMPAD0..VK_NUMPAD9 probiert, aber das funktioniert nicht.Winni hat geschrieben: Fr 24. Dez 2021, 10:16 if NOT (key in [VK_0..VK_9,VK_RETURN,VK_DELETE,VK_BACK ] ) then key := 0;
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Editfeld mit Zahlen
Hi!
Keine Ahnung.
Aber versuche es doch mal mit:
Winni
Keine Ahnung.
Aber versuche es doch mal mit:
Code: Alles auswählen
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
ShowMessage (IntToStr(key));
end;
Re: Editfeld mit Zahlen
Was heißt "funktioniert nicht"? Bei mir "funktioniert" es mit VK_NUMPAD0..VK_NUMPAD9 (die VK_* Berzeichner benötigen Unit LCLType in "uses").Adenos hat geschrieben: So 26. Dez 2021, 11:31welche Tastencodes haben denn die Zahlen auf dem rechten Zahlenfeld? Ich habe es mit VK_NUMPAD0..VK_NUMPAD9 probiert, aber das funktioniert nicht.Winni hat geschrieben: Fr 24. Dez 2021, 10:16 if NOT (key in [VK_0..VK_9,VK_RETURN,VK_DELETE,VK_BACK ] ) then key := 0;
-
- Beiträge: 67
- Registriert: So 17. Okt 2021, 17:18
- OS, Lazarus, FPC: Windows 7
- CPU-Target: X86
- Wohnort: Allgäu
Re: Editfeld mit Zahlen
VK_0..VK_9 haben auch ohne die Unit LCLType funktioniert, aber für VK_NUMPAD0..VK_NUMPAD9 braucht man sie. Komisch, aber ich versteh so viel nicht.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Editfeld mit Zahlen
Hi!Adenos hat geschrieben: So 26. Dez 2021, 14:38 VK_0..VK_9 haben auch ohne die Unit LCLType funktioniert, aber für VK_NUMPAD0..VK_NUMPAD9 braucht man sie. Komisch, aber ich versteh so viel nicht.
VK_0..VK_9 sind in LCLtype definiert. Also brauchst Du auch für die diese Unit.
Winni