Autor Beitrag
luis_figo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 29.08.05 09:50 
Möchte folgendes mit diesem Code erreichen:

ausblenden 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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconChristian S.: Topic aus VCL (Visual Component Library) verschoben am Mo 29.08.2005 um 10:07
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 29.08.05 10:16 
Moin!

Probier das mal so:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 29.08.05 10:22 
user profile iconNarses hat folgendes geschrieben:
Moin!

Probier das mal so:
ausblenden 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



geht leider nicht
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 29.08.05 10:28 
Moin!

user profile iconluis_figo hat folgendes geschrieben:
geht leider nicht

Geht es - nur wenn es keine unzumutbaren Umstände macht - vielleicht auch etwas genauer? :roll:

cu
Narses
luis_figo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 29.08.05 10:47 
user profile iconNarses hat folgendes geschrieben:
Moin!

user profile iconluis_figo hat folgendes geschrieben:
geht leider nicht

Geht es - nur wenn es keine unzumutbaren Umstände macht - vielleicht auch etwas genauer? :roll:

cu
Narses



ja auch wenn ich alle werte richtig eingebe rechnet er mir nichts aus und fehlermeldung genauso wenig
Fabian W.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: Mo 29.08.05 10:58 
ausblenden 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);
  //Code was passieren soll wenn korrekt ausgefüllt
  except
  ShowMessage('Bitte alle Felder korrekt ausfüllen');
  end;
end;

Wäre eine unschöne aber funktionierende Lösung
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 29.08.05 10:58 
Moin!

user profile iconluis_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... ? :wink:

//EDIT: @user profile iconFabian 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. :gruebel:

cu
Narses
luis_figo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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???


ausblenden 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'{or (Form1.Seite_b.Text<='0') or (Form1.Hoehe.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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.


Zuletzt bearbeitet von luis_figo am Mo 29.08.05 11:14, insgesamt 1-mal bearbeitet
Stübi
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 331

Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
BeitragVerfasst: 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:
ausblenden 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 user profile iconnarses:
ausblenden 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:
ausblenden 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
    //Deine Berechnung
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 29.08.05 11:32 
Moin!

Mein Vorschlag:
ausblenden 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
    // deine Berechnung
  end
  else
    MessageDlg('Bitte nur Zahlen eingeben!',mtWarning,[mbCancel],0);

cu
Narses
luis_figo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 29.08.05 11:39 
ausblenden 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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 29.08.05 12:03 
Moin!

Hast du irgendetwas von dem, was wir dir hier die ganze Zeit erzählen, verstanden? :gruebel:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 29.08.05 12:03 
Oder etwas strukturierter. Ich nehm mal an Wuerfel, QuadP und Quader sind RadioButtons.
ausblenden volle Höhe Delphi-Quelltext
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:; // Berechnung für Wuerfel
  stQuadP  :; // Berechnung für QuadP
  stQuader :; // Berechnung für Quader
 end;
end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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...
ausblenden 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:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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... :wink:

cu
Narses
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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... :wink: )
luis_figo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 29.08.05 13:29 
LOL so funzt es:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.RechnenClick(Sender: TObject);
var a,b,h,O,V: real;
begin
if (Form1.Wuerfel.checked=true) then
begin
Form1.Seite_b.Text:='1';
Form1.Hoehe.Text:='1';
end;

if (Form1.QuadP.checked=true) then
begin
Form1.Seite_b.Text:='1';
end;

if (Form1.Seite_a.Text<='0')or (Form1.Seite_b.Text<='0'or (Form1.Hoehe.Text<='0'then
      begin
     application.MessageBox('Bitte Zahlen eingeben!','Fehlermeldung',mb_IconStop + mb_Ok);
     exit;
     end;


Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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... :|