Nur Zahleneingabe ermöglichen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
ddog
Beiträge: 18
Registriert: Di 6. Jan 2009, 08:32
OS, Lazarus, FPC: Mac OSX 10.9 (L 1.0.14 FPC 2.6.2)

Nur Zahleneingabe ermöglichen

Beitrag von ddog »

Hallo,

ich bin gerade dabei mir einen kleinen Helfer zu basteln, der mir die Rechnerei mit dem Goldenen Schnitt abnimmt. Das Rechnen funktioniert soweit schon ganz gut, nur hab ich das Problem, dass ich in meinem TEdit-Feld nur Zahlen sowie den Dezimal-Separator ermöglichen will. Nachfolgend mein Versuch das über das Ereignis KeyPress zu machen, was aber leider gar nicht funktioniert:

Code: Alles auswählen

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
   if Key in ['0'..'9','.',#8,#115] then begin
  end
  else
    Key:=#0;
end;
Kann mir vielleicht jemand einen Tip geben? Oder hängt es mit MacOSX zusammen, dass es mit dem oben angegebenen Code nicht funktioniert?

Danke im voraus!

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: Nur Zahleneingabe ermöglichen

Beitrag von u-boot »

Ich würde emphelen einfach ein TSpinEdit bzw. ein TFloatSpinEdit zu nehmen. (Verfügbar im Reiter "Misc")
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

ddog
Beiträge: 18
Registriert: Di 6. Jan 2009, 08:32
OS, Lazarus, FPC: Mac OSX 10.9 (L 1.0.14 FPC 2.6.2)

Re: Nur Zahleneingabe ermöglichen

Beitrag von ddog »

Danke schon mal!

Leider ändert das nichts an der Tatsache, dass ich trotzdem weiterhin alles Mögliche eingeben kann und mir das Programm bei jeder kleinen Unachtsamkeit abkackt.

Ist des KeyPress Ereignis aus meinem ersten Beitrag für Mac nicht passend?

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: Nur Zahleneingabe ermöglichen

Beitrag von u-boot »

Ein Spinedit hat als Value eigentlich einen integer ein Floatspinedit eben eine Kommazahl ... kann sein dass wenn du auf spinedit.text zugreifst noch was anderes möglich ist ... also verwende einen (Float-)spinedit und greife über die eigenschaft value zu. Ausser dich stören die Pfeile an dem Kästchen so sehr....

Ansonsten würde ich alles mögliche eingeben lassen und den string dann bereinigen. evtl ausgelöst über onchange-event
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

ddog
Beiträge: 18
Registriert: Di 6. Jan 2009, 08:32
OS, Lazarus, FPC: Mac OSX 10.9 (L 1.0.14 FPC 2.6.2)

Re: Nur Zahleneingabe ermöglichen

Beitrag von ddog »

Vielen Dank!

Das mit dem Value ist schon eine sehr feine Sache! Hatte das noch nicht behirnd.

Was tät ich bloß ohne dieses Forum...

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Nur Zahleneingabe ermöglichen

Beitrag von pluto »

Versuch mal folgendes:

Code: Alles auswählen

if not (Key in ['0'..'9','.',#8,#115]) then  Key:=#0;
Ändert jedoch nichts am Fehl Verhalten, ist nur eine andere Schreibweise. Teste mal ob die if Anweisung überhaupt Ausgeführt wird bzw. das key:=#0
MFG
Michael Springwald

ddog
Beiträge: 18
Registriert: Di 6. Jan 2009, 08:32
OS, Lazarus, FPC: Mac OSX 10.9 (L 1.0.14 FPC 2.6.2)

Re: Nur Zahleneingabe ermöglichen

Beitrag von ddog »

Überraschender Weise wird die if Anweisung nicht ausgeführt, was aber im Endeffekt nichts macht. Bei näherer Betrachtung ist das TFloatSpinEdit ohnehin besser, weil ich alles eingeben kann und trotzdem nur der verwendbare Wert übernommen wird.

mannewolff
Beiträge: 10
Registriert: Mi 6. Jan 2010, 17:25
OS, Lazarus, FPC: L 0.9.28.2 FPC 2.2.4
CPU-Target: 32Bit
Wohnort: Bremen

Re: Nur Zahleneingabe ermöglichen

Beitrag von mannewolff »

Also das funktioniert so bei mir unter der letzten freigegebenen Lazarus Version:

Code: Alles auswählen

procedure TMainForm.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  if NOT (Key in [#8, '0'..'9', ',', '.']) then
    Key := #0;
 
  if (key = ',') or (key = '.') then
  if pos(',', Edit1.Text) > 0 then
  begin
    key := #0; exit;
  end;
 
  if Key = '.' then
    Key := ',';
end;
Die Routine ersetzt außerdem einen Dezipalpunkt in ein Komma und stellt sicher, dass das Komma nur einmal eingegeben wird.

Antworten