![]() |
Eingabe beschränken
Moin Leuts,
ist es möglich ein Edit so zu beeinflussen,dass nur Zahlen akzeptiert werden und nach eingabe eines Kommas (Fliesskommazahl) nur noch max 2 Stellen eingegeben werden können. (Sonst kommt es Fehler in der Berechnung) und wenn es machbar ist: wenn ein komma eingegeben wurde,kein weiteres akzeptieren ***Aber das sind ja 3 Wünsche auf einmal!*** :mrgreen: Rutscht gut Rein!! |
Moin Privateer,
das ginge entweder mit einem TMaskEdit, oder aber Du fängst das OnKeyPress Ereignis ab, prüfst den Inhalt und löscht ggf. das übergebene Zeichen. TMaskEdit soll allerdings etwas buggy sein. (Das weiss ich allerdings nicht genau, ich hab' damit nie gearbeitet) |
Ja eben, ich hab keine Ahnung
wie ich die Eingabe eines weiteren Kommas verhindere. Vielleicht sollte ich sie ganz verhindern?! Geht das: User gibt beispielsweise 110 ein. Jetzt wird diese Zahl in 1,10 also immer 2 Dezimalstellen um gewandelt. Bei 1100 in 11,00. Wie müsste man das anstellen |
du könntest doch ganz einfach mit Length die Länge des Strings feststellen und dann mit Copy den ersten Teil herauskopieren (Length -2)
Dann das Komma dazwischen packen und dann wieder mit Copy den letzten Teil kopieren und ans Ende anfügen Alexander |
So auf die Schnelle:
Delphi-Quellcode:
var
Comma : Boolean = FALSE; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if (Comma = TRUE) and (Key = #44) then key := #0; if pos(',', Edit1.Text) > 0 then Comma := TRUE else Comma := FALSE; if not (Key in [#8,#44,#48 .. #57]) then Key := #0 end; |
Thx @ all!
|
@Luckie
dein Beispiel funktioniert soweit nur muss man 2mal auf Komma tippen um eins zu bekommen!? |
war ja auch nur so auf die Schnelle. Optimier es doch einfach noch etwas.
|
Ich hab mir auch mal was dazu gebastelt.
Hallo bin blutiger Anfänger aber das mit den Kommas hat mich echt tierisch genervt. Wollte einfach das ich noch angeben kann wieviel Stellen ich noch nach dem Komma eingeben kann. Naja bin dann nach langem rumprobieren auf das hier gekommen:
Geht sicher auch noch einfacher aber wie gesagt blutiger Anfänger. :D
Delphi-Quellcode:
Jetzt muß ich mir nurn noch was basteln wo wenn ich das Edit Feld verlasse die Stellen hinter dem Komma mit Nullen aufgefüllt werden.
procedure TForm1.InnendurchmesserKeyPress(Sender: TObject; var Key: Char);
var Komma: Boolean; Position: Integer; Stellenpuffer: String; Zeichenpuffer: String; Stellenanzahl: Integer; begin Komma := False; Zeichenpuffer := Innendurchmesser.Text; if Pos('.', Zeichenpuffer) > 0 then Komma := True; if (Komma = True) and (Key = #44) then Key := #0; if (Komma = True) and (Key = #46) then Key := #0; if (Komma = False) and (Key = #44) then Key := '.'; if Pos('.', Zeichenpuffer) > 0 then begin Stellenanzahl := Length(Zeichenpuffer); Position := Pos('.', Zeichenpuffer); Stellenpuffer := Copy(Zeichenpuffer, Position+1, Stellenanzahl-Position); Stellenanzahl := Length(Stellenpuffer); if Stellenanzahl = 3 then begin if (Key in [#44, #46, #48..#57]) then Key := #0 end; end; if Key = #13 then Key := #0; if not (Key in [#8, #44, #46, #48..#57]) then Key := #0; end; Also aus z.B. 3 wird 3.000 oder aus 12.37 wird 12.370 Ich finde das Forum hier echt super muß ich noch sagen. Respekt gibt keine übersichtlicheres als das hier. Man sieht das ihr Euch echt viel Arbeit damit macht und ich hoffe Ihr macht weiter so. Damit ich noch viel lernen kann :hello: Gruß Markus |
Das mit dem Nullen auffüllen würde ich so machen:
Wenn deine Komma-Variable true ist, mit pos nach dem Komma suchen und dann pos von der gesamtlänge abziehen, dann weißt du weiviele Stellen hinter dem Komma sind und die kannst du dann auffüllen, bzw einfach hinzufügen. Man liest sich, Stanlay 8) |
Man könnte natürlich auch ein MaskEdit bemühen. :wink:
|
Warum einfach, wenn auch kompliziert geht? Nö im ernst, ich hab noch nie ein MaskEdit benutzt, weiß deshalb natürlich auch nicht was es für funktionen hat und wie man es bedient.
Man liest sich, Stanlay 8) |
So das mit dem auf füllen hab ich nun auch hingebastelt bekommen.
Einfach kann jeder! Ich mach es gern kompliziert :mrgreen: Wollte das wenn eine nur komma und dann ne zahl tippt vor dem komma dann ne null ist. und wenn einer nur ne zahl tippt ohne komma das dann automatisch das komma plus drei nullen hingeschrieben werden. hab das mit dem onexit gemacht.
Delphi-Quellcode:
Jetzt such ich nur noch was wenn ich wieder in das Tedit zurück gehe mit der maus oder mit tab und ich mit dem cursor vor das komma gehe das ich dann noch ne zahl eingeben kann bzw eine löschen oder so. geht ja im moment nicht weil ja drei zahlen nach dem komma da stehen. *grummel* irgendwie muß ich doch die cursor position in dem edit feld abfragen können und dann entscheiden ob ich davor bin und ne zahl eingeben darf oder löschen oder ob ich danach bin und nich darf.
procedure TForm1.InnendurchmesserExit(Sender: TObject);
var Zeichenpuffer, Zeichenpuffer2: String; Stellenanzahl: Integer; Position: Integer; Nachkommastellen: String; begin Zeichenpuffer := Innendurchmesser.Text; if Pos('.', Zeichenpuffer) > 0 then begin Stellenanzahl := Length(Zeichenpuffer); Position := Pos('.', Zeichenpuffer); Nachkommastellen := Copy(Zeichenpuffer, Position+1, Stellenanzahl-Position); Zeichenpuffer2 := Copy(Zeichenpuffer, 0, Position); Stellenanzahl := Length(Nachkommastellen); while Stellenanzahl < 3 do begin Nachkommastellen := Nachkommastellen + '0'; Stellenanzahl := Length(Nachkommastellen); end; Innendurchmesser.Text := Zeichenpuffer2 + Nachkommastellen end; if Pos('.', Zeichenpuffer) = 1 then Innendurchmesser.Text := '0.' + Nachkommastellen; if Pos('.', Zeichenpuffer) = 0 then Innendurchmesser.Text := Zeichenpuffer + '.000' end; naja ich such mal hier im forum bisschen rum. vielleicht find ich ja was. Markus. [EDIT=Luckie]Das Forum kennt auch Code-Tags, sogar speziell für Delphi. Die muß man nur nutzen, von alleine geht das nicht.[/EDIT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz