EditFeld: nur Zahlen zulassen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Johanna
Beiträge: 5
Registriert: Mo 5. Feb 2007, 18:52
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Schweiz

Beitrag von Johanna »

Es funktioniert :D :D :D

Vielen Dank euch beiden!

Anscheinend habe ich da mit dem "myEdit.OnKeyPress:=@Edit1KeyPress:" wirklich was wichtiges verpasst.

Ich habe das Problem jetzt wie folgt gelöst:

Code: Alles auswählen

procedure TForm3.FormKeyPress(Sender: TObject; var Key: char);
begin
  if not (key in ['0'..'9',#8,#27,#127]) then begin
  key:=#0;
  end;
end;


Dadurch werden nur zahlen, die back-taste, delete und noch was anderes aktiviert.
beim Delphi hatte ich noch ein OnKeyDown-Ereignis, um Kombinationen wie "Ctrl+Alt+Delete" oder "Alt+F4" zu ermöglichen, falls das Projekt abstürzen sollte. Das braucht es aber hier gar nicht, diese beiden funktionieren auch so.
Und dann habe ich beim erzeugen der EditFelder folgendes eingefügt:

Code: Alles auswählen

Edit[i].OnKeyPress := @FormKeyPress;


Vielen Dank nochmals für die viele Geduld mit mir :lol:
Jetzt bin ich wirklich froh, dass es funktoniert.

Gute nacht
Gruss
Johanna

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

Beitrag von pluto »

um Kombinationen wie "Ctrl+Alt+Delete" oder "Alt+F4" zu ermöglichen, falls das Projekt abstürzen sollte.

ich würde sagen dann hilft auch das nicht mehr ! wenn das Projekt abgestützt ist !

Du könntest allerdings in schleifen eine globale vairbale einfügen ! die gesetzt wird wenn du Alt+F4 oder ESCAPE drückst so könntest du schleifen abfangen wenn die sich aufgehangen haben... wenn du das meinst
MFG
Michael Springwald

dietmarf
Beiträge: 31
Registriert: Mi 17. Jan 2007, 10:19
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von dietmarf »

ich hab das mal für ein Taschenrechner-Experiment ganz anders gelöst:

Ereignis OnChange des Editfelds:

Code: Alles auswählen

procedure TForm1.Edit1Change;
var temp: integer
begin
  try
    temp := strtoint(edit1.text);   {wandelt edit1.text in eine Zahl um, was fehlschlägt,
                                                 wenn was anderes gedrückt wird}

  except
    edit1.text := copy(edit1.text,1,length(edit1.text)-1){wenn die Umwandlung in eine Zahl
                                                                                 fehlschlägt wird das letze Zeichen
                                                           gelöscht, was OnChange wieder auslöst, so lange bis
                                                           alle "nicht-Zahlen" entfernt sind}

  end;
end;

Antworten