ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
1015
1015
EMPFEHLEN
-
12.04.05 10:56 #1
- Registriert seit
- Oct 2004
- Beiträge
- 161
Hallo, ich möchte bei der Eingabe einer Gleitkommazahl über ein TEdit-Feld diese überwachen. Genaugenommen möchte ich, wenn der Benutzer eine Zahl mit "." eingibt, diese umwandeln in eine Zahl mit ",".
Ich habe dies bis jetzt mit einer OnChange - Methode des Edit-Feldes gelöst:
Kennt jemand vielleicht eine elegantere Lösung?Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
void __fastcall TForm1::Edit1Change(TObject *Sender) { int length = Edit1->GetTextLen(); //Länge des eingebenen Strings Edit1->SelStart = length -1; */Markieren des zuletzt eingegeben Edit1->SelLength = 1; Zeichens im Edit-Feld*/ AnsiString buffer = Edit1->SelText; //Speichern des Zeichens if(buffer == ".") //Überprüfen des Zeichens { buffer = ","; //eventuell Zeichen ändern Edit1->SelStart = length - 1; /*Erneutes Markieren des Edit1->SelLength = 1; Zeichens im Edit-Feld*/ Edit1->SelText = buffer; //Zeichen gegebenenfalls ersetzen } length = Edit1->GetTextLen(); /*Cursor wieder ans Ende Edit1->SelStart = length; der Eingabe setzen*/ }
-
12.04.05 22:39 #2
Ich versteh nicht ganz, warum du das mit SelStart und SelEnd machst.
so sollte es auch, und wesentlich kürzer gehen :
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
void __fastcall TForm1::Edit1Change(TObject *Sender) { int Pos; AnsiString buffer = Edit1->Text; Pos = buffer.Pos( "." ); if( Pos ) { buffer[ Pos ] = ','; Edit1->Text = buffer; } }
Es kann allerdings sein, daß diese Methode wieder ein OnChange auslöst,
aber dann ist ja kein '.' mehr drin, und alles ist in Ordnung...
Außerdem: Ich weiß nicht genau, aber es kann sein du brauchst nicht mal buffer,
da du Edit1->Text direkt bearbeiten kannst, aber mit Properties ist das immer so
eine Sache...
BadMourning
-
13.04.05 07:49 #3
- Registriert seit
- Oct 2004
- Beiträge
- 161
Der Code funktioniert gut, musste nur am Ende noch eine Zeile einfügen:
Edit1->SelStart = Pos;
sonst steht der Cursor nach dem ändern des Zeichens am Anfang des Feldes. Ich hatte das mit SelStart und SelLength gemacht, weil ich nicht wusste, wie ichs sonst machen sollte, an die Pos-Methode von AnsiStrings hab ich gar nicht gedacht. Deine Variante sieht auf jeden Fall besser aus (kürzer und somit übersichtlicher), als meine, vielen Dank!
mfg, Andreas Gierisch
-
Das wäre idealerweise die Aufgabe eines MaskEdit-Feldes, es gehört zu den Standardkomponenten so viel ich weiss . . .
Ähnliche Themen
-
Eingabe im Hintergrund überwachen
Von bastionmancher im Forum C/C++Antworten: 1Letzter Beitrag: 20.05.07, 00:55 -
TEdit nach Eingabe formatieren (reseten)
Von ab1303 im Forum Borland CBuilder und VCLAntworten: 2Letzter Beitrag: 22.06.05, 01:51 -
TEdit Eingabe einschränken?
Von Snape im Forum Borland CBuilder und VCLAntworten: 8Letzter Beitrag: 18.10.04, 21:19 -
TEdit und UNICODE
Von Loods im Forum Borland CBuilder und VCLAntworten: 0Letzter Beitrag: 27.07.04, 09:37 -
TEdit multiline
Von Interritor im Forum Delphi, Kylix, PascalAntworten: 6Letzter Beitrag: 07.05.03, 19:33





Zitieren
Login






