TEdit mit Dezimalzahlformatierung

Rund um die LCL und andere Komponenten
Antworten
Strathmore
Beiträge: 17
Registriert: So 7. Jan 2007, 00:09
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

TEdit mit Dezimalzahlformatierung

Beitrag von Strathmore »

Werte Lazarusgemeide,

bin auf der Suche nach einer "TEdit" Komponente, bei der man das einzugebende Format einstellen kann. Auf z.B. 99,99. Die TMaskEdit gefällt mir nicht so, da dort die Eingabe wie diese möglich ist: 9_,99. Oder ich habe das Format dort nur nicht richtig eingestellt ... Vielleicht weiss jemand Rat.

Vielen Dank im Voraus.

Live
Beiträge: 144
Registriert: So 22. Aug 2010, 16:06
OS, Lazarus, FPC: Backtrack 5 RC4 - 64bit Gnome
CPU-Target: 64bit
Wohnort: NRW
Kontaktdaten:

Re: TEdit mit Dezimalzahlformatierung

Beitrag von Live »

Strathmore hat geschrieben:Werte Lazarusgemeide,

bin auf der Suche nach einer "TEdit" Komponente, bei der man das einzugebende Format einstellen kann. Auf z.B. 99,99. Die TMaskEdit gefällt mir nicht so, da dort die Eingabe wie diese möglich ist: 9_,99. Oder ich habe das Format dort nur nicht richtig eingestellt ... Vielleicht weiss jemand Rat.

Vielen Dank im Voraus.
TFloatSpinEdit unter dem Tab "Misc" in der IDE sollte etwas für dich sein. Anzahl der Dezimalstellen ist über das Property DecimalPlaces einstellbar.

Strathmore
Beiträge: 17
Registriert: So 7. Jan 2007, 00:09
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Re: TEdit mit Dezimalzahlformatierung

Beitrag von Strathmore »

Hallo Live,

bei direkter Eingabe werden die Einschränkungen jedoch nicht eingehalten.

Gruss

Live
Beiträge: 144
Registriert: So 22. Aug 2010, 16:06
OS, Lazarus, FPC: Backtrack 5 RC4 - 64bit Gnome
CPU-Target: 64bit
Wohnort: NRW
Kontaktdaten:

Re: TEdit mit Dezimalzahlformatierung

Beitrag von Live »

Alternativ könntest du Tastatureingaben abfangen und alles was kein Return, eine Zahl (oder ein Komma) ist, nicht in das Editfeld schreiben.

Code: Alles auswählen

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
    if NOT (Key in [#08, '0'..'9']) then
    Key := #0;
end;
Der obere Code erlaubt die Eingaben 0-9 und die Return-Taste. Komma müsstest du evtl selber hinzufügen.

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TEdit mit Dezimalzahlformatierung

Beitrag von Socke »

Live hat geschrieben:Der obere Code erlaubt die Eingaben 0-9 und die Return-Taste. Komma müsstest du evtl selber hinzufügen.
Ehrlich gesagt, überprüft er nur Zeichen, die in ASCII enthalten sind (0-127). Da die LCL aber mit UTF-8 arbeitet, sind alle Unicode-Zeichen immer erlaubt.

Code: Alles auswählen

procedure TForm1.Edit1UTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);
begin
  if (Length(UTF8Key) <> 1) or not (UTF8Key[1] in [#08, '0' .. '9']) then
    UTF8Key := #0;
end;
Funktioniert hingegen besser -- Umlaute können nicht mehr eingegeben werden. Die erlaubten Zeichen müssen noch angepasst werden. Dazu müsste noch eine Überprüfung erfolgen, ob bereits ein Dezimaltrennzeichen eingegeben wurde.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Live
Beiträge: 144
Registriert: So 22. Aug 2010, 16:06
OS, Lazarus, FPC: Backtrack 5 RC4 - 64bit Gnome
CPU-Target: 64bit
Wohnort: NRW
Kontaktdaten:

Re: TEdit mit Dezimalzahlformatierung

Beitrag von Live »

Socke hat geschrieben:
Live hat geschrieben:Der obere Code erlaubt die Eingaben 0-9 und die Return-Taste. Komma müsstest du evtl selber hinzufügen.
Ehrlich gesagt, überprüft er nur Zeichen, die in ASCII enthalten sind (0-127). Da die LCL aber mit UTF-8 arbeitet, sind alle Unicode-Zeichen immer erlaubt.

Code: Alles auswählen

procedure TForm1.Edit1UTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);
begin
  if (Length(UTF8Key) <> 1) or not (UTF8Key[1] in [#08, '0' .. '9']) then
    UTF8Key := #0;
end;
Funktioniert hingegen besser -- Umlaute können nicht mehr eingegeben werden. Die erlaubten Zeichen müssen noch angepasst werden. Dazu müsste noch eine Überprüfung erfolgen, ob bereits ein Dezimaltrennzeichen eingegeben wurde.
Du hast absolut recht, sorry ;)

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: TEdit mit Dezimalzahlformatierung

Beitrag von u-boot »

Nun ich würde das im OnChange-Ereignis lösen. Dann wird bei jeder Veränderung sichergestellt, dass die eingegebenen Zeichen dem gewünschten Format entsprechen.

Aber ehrlich gesagt, reicht mir zumindest FloatSpinEdit.Value. Bei mir wird eingehalten, dass es ein Zahlenformat bleibt ohne Sonderzeichen (momentan habe ich Revision 29147). Habe gerade ausprobiert und festgestellt dass in der 0.9.28 die Sache mit den Sonderzeichen noch geht. Die Reaktion auf die Eingaben ist allerdings manchmal etwas seltsam :shock: .
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Antworten