Damit die Nachkommastellen immer erkannt werden, sollten nicht-Zahl, -Lösch, oder -Kommas nicht zugelassen werden. Die eigentliche Prüfmethode arbeitet so, dass erst der neue Inhalt der Zelle zusammengesetzt wird (OnKeyPress wird vor dem eigentlichen Einfügen aufgerufen), dann wird der Nachkommateil seperiert und dessen Länge festgestellt, bei überlänge wird das einzufügende Zeichen gelöscht.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9',#8,#44]) then begin Key:=#0; Beep; end else begin if Key<>#8 then begin zelle:=StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row]+Key; nachkomma:=''; for i:=Length(zelle) downto 1 do if zelle[i]=#44 then Break else nachkomma:=nachkomma+zelle[i]; if Length(Nachkomma)>2 then begin Key:=#0; Beep; end; end; end; end; |
Der Code muss in die Ereignisbehandlung OnKeyPress von dem Stringgrid (Stringgrid Markieren, im Objektinspektor auf Ereignisse, Doppelklick auf das Editfeld rechts neben OnKeyPress, Code einfügen)
Code ist getestet, bei mir gehts.
Edit: Code-Zeile 3, #46 durch #44 ersetzt.
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.