Autor |
Beitrag |
luis_figo
Beiträge: 16
|
Verfasst: Mo 29.08.05 09:50
Möchte folgendes mit diesem Code erreichen:
Delphi-Quelltext 1: 2: 3:
| if (Form1.Seite_a.Text<='0') or (Form1.Seite_b.Text<='0') or (Form1.Hoehe.Text<='0') then
application.MessageBox('Bitte nur Zahlen eingeben!','Fehlermeldung',16); |
Habe 3 Edit Felder! Wenn eines der 3 keine Zahl oder einen Text enthält soll er aufschreien und den Benutzer darauf aufmerksam machen! Wenn alle 3 Felder danach korrekt ausgefüllt sind soll das Programm richtig weiterlaufen!
Wie funzt das??
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.Moderiert von Christian S.: Topic aus VCL (Visual Component Library) verschoben am Mo 29.08.2005 um 10:07
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 29.08.05 10:16
Moin!
Probier das mal so:
Delphi-Quelltext 1: 2: 3:
| if ( (StrToIntDef(Form1.Seite_a.Text,-1) = -1) or (StrToIntDef(Form1.Seite_b.Text,-1) = -1) or (StrToIntDef(Form1.Hoehe.Text,-1) = -1) ) then |
cu
Narses
|
|
luis_figo
Beiträge: 16
|
Verfasst: Mo 29.08.05 10:22
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 29.08.05 10:28
Moin!
luis_figo hat folgendes geschrieben: | geht leider nicht |
Geht es - nur wenn es keine unzumutbaren Umstände macht - vielleicht auch etwas genauer?
cu
Narses
|
|
luis_figo
Beiträge: 16
|
Verfasst: Mo 29.08.05 10:47
|
|
Fabian W.
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: Mo 29.08.05 10:58
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var test : integer; begin try test := strtoint(Edit1.text); test := strtoint(Edit2.text); test := strtoint(Edit3.text); except ShowMessage('Bitte alle Felder korrekt ausfüllen'); end; end; |
Wäre eine unschöne aber funktionierende Lösung
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 29.08.05 10:58
Moin!
luis_figo hat folgendes geschrieben: | ja auch wenn ich alle werte richtig eingebe rechnet er mir nichts aus und fehlermeldung genauso wenig |
Hättest du dann die Güte, uns Unwürdigen die gesamte Prozedur vorzustellen... ?
//EDIT: @ Fabian W.: Das ist gleichwertig zu meinem Code, nur umständlicher und mit Exception... Das liegt doch garantiert an seinem Code, der danach kommt, dass es nicht klappt, nur den kennt keiner.
cu
Narses
|
|
luis_figo
Beiträge: 16
|
Verfasst: Mo 29.08.05 11:09
So wie ich es gemacht hab funzt es ja eigentlich auch (fast) perfekt.
Wenn nicht in allen 3 Feldern eine Zahl drinnen steht kommt ne Fehlermeldung allerdings wenn die Felder richtig ausgefüllt werden danach rechnet er mir kein Ergebnis aus???
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.RechnenClick(Sender: TObject); var a,b,h,O,V: real; begin if (Form1.Wuerfel.checked) and (Form1.Seite_a.Text<='0') then
application.MessageBox('Bitte Zahlen eingeben!','Fehlermeldung',16); exit;
a:= StrToFloat (Form1.Seite_a.Text); b:= StrToFloat (Form1.Seite_b.Text); h:= StrToFloat (Form1.Hoehe.Text); |
//EDIT: Es geht im allgemeinen Um eine Quader-Berechnung mit Länge,Breite,Höhe für Volumen und Oberfläche...
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
Zuletzt bearbeitet von luis_figo am Mo 29.08.05 11:14, insgesamt 1-mal bearbeitet
|
|
Stübi
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: Mo 29.08.05 11:13
Benutze bitte das nächste Mal die Delphi Tags
Zu Deinem Code, versuche es mal mit einem Begin und end; in etwa so:
Delphi-Quelltext 1: 2: 3: 4: 5:
| if (Form1.Seite_a.Text<='0') or (Form1.Seite_b.Text<='0') or (Form1.Hoehe.Text<='0') then begin application.MessageBox('Bitte nur Zahlen eingeben!','Fehlermeldung',16); exit; end; |
oder nach narses:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| if ( (StrToIntDef(Form1.Seite_a.Text,-1) = -1) or (StrToIntDef(Form1.Seite_b.Text,-1) = -1) or (StrToIntDef(Form1.Hoehe.Text,-1) = -1) ) then begin application.MessageBox('Bitte nur Zahlen eingeben!','Fehlermeldung',16); exit; end; |
aber schöner währe:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| if ( (StrToIntDef(Form1.Seite_a.Text,-1) = -1) or (StrToIntDef(Form1.Seite_b.Text,-1) = -1) or (StrToIntDef(Form1.Hoehe.Text,-1) = -1) ) then begin application.MessageBox('Bitte nur Zahlen eingeben!','Fehlermeldung',16); end else begin end; |
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
Zuletzt bearbeitet von Stübi am Mo 29.08.05 11:16, insgesamt 1-mal bearbeitet
|
|
uall@ogc
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mo 29.08.05 11:15
da fehlt nen 'begin' nach 'then' und nen 'end' nach 'exit'
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 29.08.05 11:32
Moin!
Mein Vorschlag:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| if ( (StrToFloatDef(Form1.Seite_a.Text,-1) <> -1) and (StrToFloatDef(Form1.Seite_b.Text,-1) <> -1) and (StrToFloatDef(Form1.Hoehe.Text,-1) <> -1) ) then begin end else MessageDlg('Bitte nur Zahlen eingeben!',mtWarning,[mbCancel],0); |
cu
Narses
|
|
luis_figo
Beiträge: 16
|
Verfasst: Mo 29.08.05 11:39
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| if (Form1.Wuerfel.checked) and (Form1.Seite_a.Text<='0')then begin application.MessageBox('Bitte Zahlen eingeben!','Fehlermeldung',16); exit; end;
if (Form1.QuadP.checked) and (Form1.Seite_a.Text<='0') or (Form1.Hoehe.Text<='0') then begin application.MessageBox('Bitte Zahlen eingeben!','Fehlermeldung',16); exit; end;
if (Form1.Quader.checked=true) and (Form1.Seite_a.Text<='0') or (Form1.Seite_b.Text<='0') or (Form1.Hoehe.Text<='0') then begin application.MessageBox('Bitte Zahlen eingeben!','Fehlermeldung',16); exit; end; |
Habe das jetzt versucht so zu lösen allerdings funktioniert jetzt immer nur die letzte Anweisung....
Wie setze ich alle gleich damit sie zur selben Zeit angesprochen werden!??
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 29.08.05 12:03
Moin!
Hast du irgendetwas von dem, was wir dir hier die ganze Zeit erzählen, verstanden?
Du kommst immer mit einem anderen Problem um die Ecke (und merkst das gar nicht!); wie wäre es, wenn du mal das gesamte Projekt vorstellst? Damit meine ich nicht den Code, sondern das Konzept.
cu
Narses
|
|
delfiphan
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 29.08.05 12:03
Oder etwas strukturierter. Ich nehm mal an Wuerfel, QuadP und Quader sind RadioButtons.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| type TFields = (fiA, fiH, fiB); TShapeType = (stWuerfel, stQuadP, stQuader); TShapeInfo = record ShapeType: TShapeType; NeededFields: set of TFields; end;
const siWuerfel: TShapeInfo = (ShapeType: stWuerfel; NeededFields: [fiA]); siQuadP : TShapeInfo = (ShapeType: stQuadP; NeededFields: [fiA,fiH]); siQuader : TShapeInfo = (ShapeType: stQuader; NeededFields: [fiA,fiB,fiH]);
function CheckAndConv(const S: String): Extended; begin Result := StrToInt(S); if Result < 0 then Abort; end;
procedure TForm1.RechnenClick(Sender: TObject); var A, H, B: Extended; Shape: TShapeInfo; begin if Wuerfel.Checked then Shape := siWuerfel else if QuadP.Checked then Shape := siQuadP else if Quader.Checked then Shape := siQuader else raise Exception.Create('Unknown selection.'); with Shape do try if fiA in NeededFields then A := CheckAndConv(Seite_a.Text); if fiB in NeededFields then B := CheckAndConv(Seite_b.Text); if fiH in NeededFields then H := CheckAndConv(Hoehe.Text); except MessageDlg('Ungültige Zahl eingegeben.', mtError, [mbOk], 0); Abort; end; Case Shape.ShapeType of stWuerfel:; stQuadP :; stQuader :; end; end; |
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.08.05 12:55
Wenn sowieso nur Zahlen eingegeben werden sollen, was soll denn das ganze Theater mit try oder ähnliches?
Es muss doch nur in onKeyPress der Edits folgendes rein:
//edit: Jetzt geht auch Backspace...
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; |
Wohlgemerkt, alle drei onKeyPress müssen da hin führen! Das heißt, beim ersten onKeyPress Doppelklick und den Code eintragen, bei den anderen dann dieses Ereignis per DropDown auswählen.
Dann ist sichergestellt, dass eine Zahl oder gar nix in den Edits steht.
Also kann dann ganz einfach auf eine gültige Eingabe getestet werden:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| if (Form1.Seite_a.Text = '') or (Form1.Seite_b.Text = '') or (Form1.Hoehe.Text = '') then begin Application.MessageBox('Bitte nur Zahlen eingeben!', 'Fehlermeldung', mb_IconStop + mb_Ok); Exit; end; |
Zuletzt bearbeitet von jaenicke am Mo 29.08.05 13:01, insgesamt 1-mal bearbeitet
|
|
Fabian W.
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: Mo 29.08.05 12:58
Jedoch ist dann das Löschen des Texten in dem edit nicht mehr möglich.
Du solltest also die Rück oder Entf taste noch freigeben.
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 29.08.05 13:00
Moin!
Und ein Dezimalzeichen, sonst wird das mit den Realzahlen nix; nur dann ist die schöne Idee wieder hinfällig...
cu
Narses
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.08.05 13:05
Ok, hab BackSpace eingefügt, aber Entf wird von onKeyPress doch überhaupt gar nicht abgefangen...
Und was die anderen zeichen anbelangt: Die kann er ja selbst ergänzen, wie es geht, sieht er ja hoffentlich.
Und den Zeichencode bekommt er ja, wenn er nen Debug-Point auf die erste Zeile in onKeyPress setzt und Key auswertet. (@luis_figo: Das als kleiner Hinweis, bevor die Frage kommt... )
|
|
luis_figo
Beiträge: 16
|
Verfasst: Mo 29.08.05 13:29
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 29.08.05 13:56
Tja, wie ich es mir schon die ganze Zeit dachte; wenn ich mir den Code do oben so ansehe, sieht es so aus, als streuten wir hier Perlen vor die Anfänger...
|
|