Editfeld mit Zahlen

Für Fragen von Einsteigern und Programmieranfängern...
Adenos
Beiträge: 64
Registriert: So 17. Okt 2021, 17:18
OS, Lazarus, FPC: Windows 7
CPU-Target: X86
Wohnort: Allgäu

Editfeld mit Zahlen

Beitrag von Adenos »

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.

Benutzeravatar
theo
Beiträge: 8845
Registriert: Mo 11. Sep 2006, 19:01

Re: Editfeld mit Zahlen

Beitrag von theo »

Adenos hat geschrieben:
Fr 24. Dez 2021, 09:45
Früher gab es mal MaskEdit, aber das scheint es nicht mehr zu geben.
Was meinst du damit?
Wieso soll es das nicht mehr geben?
https://wiki.freepascal.org/TMaskEdit

Adenos
Beiträge: 64
Registriert: So 17. Okt 2021, 17:18
OS, Lazarus, FPC: Windows 7
CPU-Target: X86
Wohnort: Allgäu

Re: Editfeld mit Zahlen

Beitrag von Adenos »

oh, Entschuldigung. Das habe ich nicht gesehen. Vielen Dank.

Benutzeravatar
Winni
Beiträge: 1116
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Editfeld mit Zahlen

Beitrag von Winni »

Hi!

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;
Viele bunte Eier wünscht

Winni

Benutzeravatar
Ally
Beiträge: 188
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: Editfeld mit Zahlen

Beitrag von Ally »

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.

Benutzeravatar
gladio
Beiträge: 147
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

Beitrag von gladio »

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.

wp_xyz
Beiträge: 4108
Registriert: Fr 8. Apr 2011, 09:01

Re: Editfeld mit Zahlen

Beitrag von wp_xyz »

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.

Adenos
Beiträge: 64
Registriert: So 17. Okt 2021, 17:18
OS, Lazarus, FPC: Windows 7
CPU-Target: X86
Wohnort: Allgäu

Re: Editfeld mit Zahlen

Beitrag von Adenos »

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;
ja, vielen Dank. Das finde ich auch viel besser.

wennerer
Beiträge: 352
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.2.0 (rev lazarus_2_2_0) FPC 3.2.2 x86_
CPU-Target: x86_64-linux-gtk2

Re: Editfeld mit Zahlen

Beitrag von wennerer »

Hi,
ich verwende auch gern mal "strtointdef".
https://www.freepascal.org/docs-html/rt ... ntdef.html

Viele Grüße
Bernd

PascalDragon
Beiträge: 446
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

Beitrag von PascalDragon »

wennerer hat geschrieben:
Fr 24. Dez 2021, 12:37
ich verwende auch gern mal "strtointdef".
https://www.freepascal.org/docs-html/rt ... ntdef.html
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.
FPC Compiler Entwickler

Adenos
Beiträge: 64
Registriert: So 17. Okt 2021, 17:18
OS, Lazarus, FPC: Windows 7
CPU-Target: X86
Wohnort: Allgäu

Re: Editfeld mit Zahlen

Beitrag von Adenos »

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;
welche Tastencodes haben denn die Zahlen auf dem rechten Zahlenfeld? Ich habe es mit VK_NUMPAD0..VK_NUMPAD9 probiert, aber das funktioniert nicht.

Benutzeravatar
Winni
Beiträge: 1116
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Editfeld mit Zahlen

Beitrag von Winni »

Hi!

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; 
Winni

wp_xyz
Beiträge: 4108
Registriert: Fr 8. Apr 2011, 09:01

Re: Editfeld mit Zahlen

Beitrag von wp_xyz »

Adenos hat geschrieben:
So 26. Dez 2021, 11:31
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;
welche Tastencodes haben denn die Zahlen auf dem rechten Zahlenfeld? Ich habe es mit VK_NUMPAD0..VK_NUMPAD9 probiert, aber das funktioniert nicht.
Was heißt "funktioniert nicht"? Bei mir "funktioniert" es mit VK_NUMPAD0..VK_NUMPAD9 (die VK_* Berzeichner benötigen Unit LCLType in "uses").

Adenos
Beiträge: 64
Registriert: So 17. Okt 2021, 17:18
OS, Lazarus, FPC: Windows 7
CPU-Target: X86
Wohnort: Allgäu

Re: Editfeld mit Zahlen

Beitrag von Adenos »

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.

Benutzeravatar
Winni
Beiträge: 1116
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Editfeld mit Zahlen

Beitrag von Winni »

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.
Hi!

VK_0..VK_9 sind in LCLtype definiert. Also brauchst Du auch für die diese Unit.

Winni

Antworten