Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Edit mit Wert füllen, aber nicht anzeigen
Pinkywesen - Fr 29.10.10 11:14
Titel: Edit mit Wert füllen, aber nicht anzeigen
Erneut einen schönen Guten Tag liebe Delphi-Forum.de Mitglieder,
ihr habt mir ja freundlichweise schon zweimal sehr schnell und gut geholfen. Aber leider muss ich eure Kapazitäten nochmal in Anspruch nehmen. Bin jetzt zwar ein bisschen weiter gekommen in Sachen Delphi Programmierung kann mir aber dennoch nicht bei jedem Problem alleine helfen. Nun aber zu meinem Problem:
Ich habe ein Programm das zwei Edit Komponenten beinhaltet. Diesen weise ich am Anfang den Wert "0" zu. Damit es keinen Fehler gibt wenn man versucht den Inhalt der Edits zu benutzen ohne einen Wert hinein zuschreiben. Jetzt möchte ich aber aus Design Gründen das diese Nullen nicht angzeigt werden. Wie heißt die Einstellung dazu, oder ist das irgendwie anders möglich?
Delete - Fr 29.10.10 11:17
Die gibt es nicht. Initialisiere deine Variablen vorher entsprechend oder sorge dafür, dass dein Programm nicht abstürzt, wenn da nichts drin steht.
Barret - Fr 29.10.10 11:21
Mach in der weiteren Verarbeitung vorher einfach ne abfrage was in den Edit-Feldern drin steht.
Dann Kannst du die Funktion ja abbrechen lassen oder eine Nachricht ausgeben.
Delphi-Quelltext
1: 2: 3:
| if (Edit1.Text = '') or (Edit2.Text = '') then if (MessageDlg('Bitte füllen Sie die Pflichtfelder aus!', mtInformation, [mbOK], 0) = mrOk) then Exit; |
Alternativ könntest du dann noch über KeyPress die Tasten einschränken die gedrückt werden dürfen.
Moderiert von
Gausi: Highlight- durch Delphi-Tags ersetzt
Nersgatt - Fr 29.10.10 11:44
Klingt, als würdest Du den Wert als Integer behandeln. Dann kannst Du an der Stelle eingreifen, wo Du den Text umwandelst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Function MyStrToInt(AString : String) : Integer; Begin IF AString = '' then result := 0 else result := StrToInt(AString); end; |
(aus dem Handgelenk, ungetestet)
Jetzt nur noch alle Aufrufen von StrToInt durch MyStrToInt ersetzt und alle Leerstrings werden wie '0' behandelt.
MaxWurzel - Fr 29.10.10 11:44
Wenn das Nutzen der Inhalte der Edits über einen Button geschieht, kannst du den auch solange sperren, bis in beiden Editfeldern was drinsteht:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Edit1Change(Sender: TObject); begin button1.Enabled := ((edit1.Text <> '') and (edit2.Text <> '')); end; |
Die Prozedur muss dann beiden Editfeldern im OnChange-Ereignis zugewiesen werden. Der Button muss natürlich vorher auf enabled:= false stehen.
Pinkywesen - Fr 29.10.10 11:59
Habe es jetzt so gehandhabt. Aber wenn ich jetzt zwei Nullen eintrage gibt er mir zwar meine Fehlermeldung aus. Stürzt aber trotzdem ab.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); begin if (Zahlenfeld1a.Text = '') or (Zahlenfeld1b.Text = '') = true then begin Showmessage('Bitte zwei Zahlen eintragen!'); end else a := StrToFloat(Zahlenfeld1a.Text); b := StrToFloat(Zahlenfeld1b.Text); case Rechenoperator of |
Danke an alle für ihre schnelle und gute Hilfe!
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
Nersgatt - Fr 29.10.10 12:06
Das = true kannst Du Dir sparen.
Da fehlt im Else-Zweig sicherlich das BEGIN ... END.
Ps:
| Zitat: |
| Danke an alle für ihre schnelle und gute Hilfe! |
Hier ist eigentlich das "Du" üblich.
Moderiert von
Martok: Doppelpost beräumt
Pinkywesen - Fr 29.10.10 12:20
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Ja, ich mache es zum Verständnis aber trotzdem hin. Schadet doch nicht, oder?
oh. wie Peinlich. :oops:
Ok, danke das DU mich darauf hingewiesen hast. Wollte ja nur höflich sein. :wink:
yogo - Fr 29.10.10 12:20
nicht böse gemeint, aber:
http://www.delphi-treff.de/tutorials/objectpascal/programmierung-mit-boolean-werten/typische-anfaengerfehler/
jetzt müsstest du nur noch irgendwie zusehen, dass keine buchstaben in deinen string rutschen.(ich glaube in manchen versionen muss man auch zwischen komma und punkt als trennzeichen unterscheiden)
dafür kannst du dir eine funktion schreiben, die alle zeichen in dem editfeld durchgeht und überpfüft.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function TForm1.istedittextzahl(testedit: TEdit): boolean; var zhlr: integer; tmpstr: string; inhaltboese: boolean; begin tmpstr := testedit.Text; inhaltboese := false; for zhlr := 1 to Length(tmpstr) do if not ((tmpstr[zhlr] in ['0'..'9']) or (tmpstr[zhlr] = ',')) then inhaltboese := true; result := not (inhaltboese); end; |
bei dir sähe das dann so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| : : if (istedittextzahl(Edit1) and istedittextzahl(edit2)) then begin a := StrToFloat(Zahlenfeld1a.Text); b := StrToFloat(Zahlenfeld1b.Text); case Rechenoperator of : : end; |
thepaine91 - Fr 29.10.10 12:22
Als Tipp würde ich nun noch für beide Edit felder dieses Onkeypress Ereignis erstellen bzw. zuweisen:
(Auf dein Edit1 klicken, dann F11 drücken, dann Reiter Ereignisse, bei Onkeypress doppelklicken ins Feld. Das selbe auch bei Edit2 nur in dem Fall kein Doppelklick sondern in der Dropdownliste Edit1KeyPress wählen)
Dann fügst du diesen Quellcode ein, danach werden nur noch Zahlen (und Backspace) als Eingabe akzeptiert und du kannst dir die spätere Prüfung auf Buchstaben sparen.
Quellcode wurde zwischenzeitlich Editiert
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', #8]) then Key := #0; end; |
yogo - Fr 29.10.10 13:34
thepaine91 hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', #8]) then Key := #0; end; | |
Wesentlich eleganter als meine Variante :lol:
Jetzt könnte man noch Punkte in Kommata umwandlen oder was man grade braucht.
Aber was passiert denn wenn man mit Copy und Paste mehrere Zeichen einfügt?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!