Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Prozedur abbrechen (https://www.delphipraxis.net/159077-prozedur-abbrechen.html)

delphimiri 13. Mär 2011 15:12

Prozedur abbrechen
 
Hallo!
Kann mir jemand helfen? Ich bin ein Delphi-Anfänger und möchte in einer try+except -Methode die prozedur abbrechen. gibt es dafür einen Befehl?

-187- 13. Mär 2011 15:16

AW: Prozedur abbrechen
 
Hm wie bitte?

Wenn eine Exception ausgelöst wird kannst du diese im except-Teil von try..except.. verarbeiten. Nach dem auslösen einer Exception ist die Prozedur quasi abgebrochen.
Delphi-Quellcode:
try
  Mach Irgendwas
except
 on Exception do
   Mach Irgendwas
end;

alfold 13. Mär 2011 15:24

AW: Prozedur abbrechen
 
Ist da nicht exit besser! als try-except zu entfremden! um die procedure evtl nach einem ergebnis zu verlassen?

Gruss alfold

-187- 13. Mär 2011 15:27

AW: Prozedur abbrechen
 
Seine Frage bezieht sich nicht auf "mit try..except" sondern "in einer try..except" !

alfold 13. Mär 2011 15:34

AW: Prozedur abbrechen
 
kommt doch auch darauf an. Wenn seine Procedure ne Exception Produziert, muss man sie auch behandeln und dann evtl mit exit raus gehen! Ob das aber dann richtig conform ist, hängt sicherlich davon ab was nach except-end noch alles kommen soll?

Gruss alfold

Luckie 13. Mär 2011 15:49

AW: Prozedur abbrechen
 
Zitat:

Zitat von alfold (Beitrag 1088088)
muss man sie auch behandeln und dann evtl mit exit raus gehen!

Und genau das brauchst du nicht.
Delphi-Quellcode:
procedure Foobar;
begin
  try
    ...;
    ...;
    ...;
  except
    ...;
    ...;
  end;
end;
Da muss man nirgends mehr "rausgehen", selbst wenn nach dem Except-Block noch Code folgen sollte. Aber wenn noch Code folgt, wäre das schlechter Programmierstil, weil ich dann die Fehlerbehandlung wieder über all im Code verteilt hätte, was man ja gerade mit try-except versucht zu vermeiden.

alfold 13. Mär 2011 15:54

AW: Prozedur abbrechen
 
@Luckie ich bezog dies auf:
Zitat:

Zitat von delphimiri (Beitrag 1088083)
Hallo!
Kann mir jemand helfen? Ich bin ein Delphi-Anfänger ...

Ach ja :hi: und Willkommen in der DP @delphimiri

Gruss alfold

delphimiri 13. Mär 2011 15:59

AW: Prozedur abbrechen
 
was muss ich dann bei exeption eingeben?

also, ich habe mal die stelle kopiert

Delphi-Quellcode:
//Variablen zuweisen:
try
 a := StrToInt(Edbr.text);
 b := StrToInt(Edh.text);
 c := StrToInt(Edt.text);
except
 showmessage ('Bitte überprüfen sie ihre Eingaben!');
end;
nach showmessage soll die prozedur abgebrochen werden.
exit funktioniert nicht.

Luckie 13. Mär 2011 16:01

AW: Prozedur abbrechen
 
Was spielt das für eine Rolle, ob er Anfänger ist oder nicht? Ich habe mich auf den von mir zitierten Teil deines Beitrages bezogen. Und die Aussage ist wohl nicht vom Kenntnisstand des Fragestellers abhängig. ;)

Kommt denn nach dem try-except-Block noch Code? Zeig uns doch mal die ganze Prozedur.

mkinzler 13. Mär 2011 16:01

AW: Prozedur abbrechen
 
In diesem Fall besser TryStrToInt() oder StrToIntDef() verwenden.

delphimiri 13. Mär 2011 16:02

AW: Prozedur abbrechen
 
Delphi-Quellcode:
procedure TForm1.BtqeClick(Sender: TObject);
var a, b, c, d, ax, ay, bx, by, cx, cy, dx, dy, ex, ey, fx, fy, gx, gy, hx, hy : integer;
begin
//Variablen zuweisen:
try
 a := StrToInt(Edbr.text);
 b := StrToInt(Edh.text);
 c := StrToInt(Edt.text);
except
 showmessage ('Bitte überprüfen sie ihre Eingaben!');
end;
d := round(sqrt((c/2)*(c/2)/2));
ax := 10;
ay := 10 + d + b;
bx := 10 + a;
by := 10 + d + b;
cx := 10 + a;
cy := 10 + d;
dx := 10;
dy := 10 + d;
ex := 10 + d;
ey := 10 + b;
fx := 10 + a + d;
fy := 10 + b;
gx := 10 + a + d;
gy := 10;
hx := 10 + d;
hy := 10;
//wenn der quader zu groß oder zu klein ist:
if (d+b>500) or (d+a>700) then showmessage ('Geben sie bitte kleinere Werte ein!');
if a or b or c < 20 then showmessage ('Geben sie bitte größere Werte ein!');
//Zeichnen:
Repaint;
canvas.Pen.Color := clGray;
canvas.Pen.Width := 1;
canvas.MoveTo(ex,ey);
canvas.lineTo(ax,ay);
canvas.MoveTo(ex,ey);
canvas.lineTo(fx,fy);
canvas.moveTo(ex,ey);
canvas.lineTo(hx,hy);
canvas.pen.color := clBlack;
canvas.pen.width := 2;
canvas.moveTo(dx,dy);
canvas.lineTo(cx,cy);
canvas.lineTo(bx,by);
canvas.lineTo(ax,ay);
canvas.lineTo(dx,dy);
canvas.lineTo(hx,hy);
canvas.lineTo(gx,gy);
canvas.lineTo(fx,fy);
canvas.LineTo(bx,by);
canvas.MoveTo(cx,cy);
canvas.lineTo(gx,gy);
//oberflächeninhalt/Volumen berechen:
PV.Caption:=IntTOStr (a*b*c);
PO.Caption:=IntToStr (a*b*2+a*c*2+b*c*2);
//Drehen-Button sichtbar machen:
Btdrehen.Visible := true;

end;

alfold 13. Mär 2011 16:06

AW: Prozedur abbrechen
 
Zitat:

Zitat von alfold (Beitrag 1088088)
...und dann evtl mit exit raus gehen! Ob das aber dann richtig conform ist,....

Hab ich doch geschrieben @Luckie :cry:

Und geahnt das es so ist:zwinker:

mkinzler 13. Mär 2011 16:07

AW: Prozedur abbrechen
 
Bitte verwende zukünftg Code-Tags. In diesem Fall Delphi-Tags.

Einfach Code markieren und Delphi-Symbol in der Toolbar des erweiterten Editors anklicken

Luckie 13. Mär 2011 16:12

AW: Prozedur abbrechen
 
Da liegt aber einiges im Argen, wenn ich den Code so sehe. Erstmal hätte ich die Eingabe, das Zeichnen und die Berechnungen in separate Routinen ausgelagert. Da die Werte aber in allen Routinen gebraucht werden, drängt sich hier schon eine Klasse von ganz alleine auf. Mit den Methoden: CheckInput, PaintCube, CalcVolume, CalcSurface.

Wenn es so bleiben soll (Dann aber bitte den Code niemanden zeigen, der was davon versteht.), dann packe den ganzen Code in den try-exceptblock.

alfold 13. Mär 2011 16:22

AW: Prozedur abbrechen
 
Von mir auch noch ne Hilfe.
Trenne Daten/berechnungen von VCL- in diesem Fall canvas.
Wenn Deine Berechnungen oder Eingaben nicht stimmen, brauchst du auch nicht zeichnen und somit auch nicht die Procedure vorzeitig verlassen!

Gruss alfold

delphimiri 13. Mär 2011 16:38

AW: Prozedur abbrechen
 
habe das problem gelöst! vielen dank für eure hilfe!:-D

Luckie 13. Mär 2011 16:52

AW: Prozedur abbrechen
 
Verrätst du uns auch wie?

alfold 13. Mär 2011 19:43

AW: Prozedur abbrechen
 
vermute mal :wink:
Zitat:

....dann packe den ganzen Code in den try-exceptblock.
alfold


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz