Autor |
Beitrag |
Pinkywesen
Hält's aus hier
Beiträge: 15
|
Verfasst: Fr 29.10.10 11:14
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?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: Pinkywesen
|
|
Barret
      
Beiträge: 156
Erhaltene Danke: 1
Win XP
D7 Ent
|
Verfasst: 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
_________________ Wir könnten ja, wenn wir wollten aber wir wollen ja nicht.
It´s not a bug, it´s a feature.
Für diesen Beitrag haben gedankt: Pinkywesen
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: 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.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Für diesen Beitrag haben gedankt: Pinkywesen
|
|
MaxWurzel
      
Beiträge: 77
Erhaltene Danke: 10
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: Pinkywesen
|
|
Pinkywesen 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: 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
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Für diesen Beitrag haben gedankt: Pinkywesen
|
|
Pinkywesen 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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.
Ok, danke das DU mich darauf hingewiesen hast. Wollte ja nur höflich sein. 
|
|
yogo
      
Beiträge: 121
Windowse, Linuxe
Delphi 3 Prof., D5 Enterprise, D6 Enterprise, Kylix, Delphi 2010
|
Verfasst: Fr 29.10.10 12:20
nicht böse gemeint, aber:
www.delphi-treff.de/...che-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; |
Zuletzt bearbeitet von yogo am Fr 29.10.10 13:36, insgesamt 1-mal bearbeitet
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: 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
      
Beiträge: 121
Windowse, Linuxe
Delphi 3 Prof., D5 Enterprise, D6 Enterprise, Kylix, Delphi 2010
|
Verfasst: Fr 29.10.10 13:34
|
|