Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Procedure beenden (https://www.delphipraxis.net/134313-procedure-beenden.html)

vip11 19. Mai 2009 19:17


Procedure beenden
 
hi
allso ich würde gerne ein procedure beenden wenn ein if parment zutrifft
so in der art:

Delphi-Quellcode:

procedure x;
if y = 0 then ...;
if y = 1 then <hier der endbefehl>;
if y = 2 then ...;
weiß jemand wie der befehl ist? mit break gehts net und mit end auch net :(
danke in voraus

mfg vip11

edit: sufu schon benutzt

Helmi 19. Mai 2009 19:19

Re: Procedure beenden
 
Hallo,

das ist ganz einfach, verwende den Befehl "exit".

Dax 19. Mai 2009 19:21

Re: Procedure beenden
 
Das ist aber schlechter Stil. Im Beispielfall wäre ein case-Konstrukt dafür viel besser geeignet, würde weniger Vergleiche machen und das selbe tun - und in vielen anderen Fällen lässt sich ein exit ähnlich auflösen. Was natürlich nicht heißt, dass es generell nutzlos wäre ;)

vip11 19. Mai 2009 19:22

Re: Procedure beenden
 
ok thx dan weiß ich nicht was ich falsch gemacht hab:
ich will nen kleines prog machen wo der butten einem wegspringt und hab den quelltext:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  pos : integer;

implementation

{$R *.dfm}

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
//1->2//
if pos = 1 then button1.Top := 120;
if pos = 1 then button1.Left := 8;
if pos = 1 then pos := 2;
if pos = 1 then exit;
//2->3//
if pos = 2 then button1.Top := 120;
if pos = 2 then button1.Left := 152;
if pos = 2 then pos := 3;
if pos = 2 then exit;
//3->4//
if pos = 3 then button1.Top := 137;
if pos = 3 then button1.Left := 152;
if pos = 3 then pos := 4;
if pos = 3 then exit;
//4->5//
if pos = 4 then button1.Top := 64;
if pos = 4 then button1.Left := 8;
if pos = 4 then pos := 5;
if pos = 4 then exit;
//5->1//
if pos = 5 then button1.Top := 176;
if pos = 5 then button1.Left := 8;
if pos = 5 then pos := 1;
if pos = 5 then exit;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
pos := 1;
end;

end.
aber sobalt ich über die buttenposition gehe springt die über alle positionenn und geht wieder runter

mjustin 19. Mai 2009 19:25

Re: Procedure beenden
 
Zitat:

Zitat von vip11
ok thx dan weiß ich nicht was ich falsch gemacht hab

Delphi-Quellcode:
if pos = 1 then pos := 2;
if pos = 1 then exit;
pos wird auf 2 gesetzt. Das exit wird deshalb nicht ausgeführt.

Forlan 19. Mai 2009 19:28

Re: Procedure beenden
 
Delphi-Quellcode:
if pos = 1 then
begin
  button1.Top := 120;
  button1.Left := 8;
  pos := 2;
  exit;
end;
so sollte es auch besser aussehen...

[Edit] Tippfehler^^ [/Edit]

Fussball-Robby 19. Mai 2009 19:33

Re: Procedure beenden
 
Zitat:

Zitat von Forlan
Delphi-Quellcode:
if pos = 1 then
begin
  button1.Top := 120;
  button1.Left := 8;
  pos := 2;
  exit;
end;
so sollte es auch besser aussehen...[/Edit]

Und noch besser:
Delphi-Quellcode:
case pos of
  1:begin
      button1.Top := 120;
      button1.Left := 8;
      pos := 2;
      exit;
    end;
  2:begin
      //usw..
(Wie Dax bereits sagte)

Forlan 19. Mai 2009 19:34

Re: Procedure beenden
 
Zitat:

Zitat von Fussball-Robby
Und noch besser:
Delphi-Quellcode:
case pos of
  1:begin
      button1.Top := 120;
      button1.Left := 8;
      pos := 2;
      exit;
    end;
  2:begin
      //usw..
(Wie Dax bereits sagte)

Wenn wir jetzt so anfangen, dann ist es auch besser wenn er andere Bezeichner verwendet anstatt Button1 etc. :stupid:

vip11 19. Mai 2009 19:37

Re: Procedure beenden
 
Danke an alle hab mir sehr geholfen :) super forum

mfg vip11

SirThornberry 19. Mai 2009 20:06

Re: Procedure beenden
 
hmm, ein case bei 5 Werten ist grenzwertig. Lohnt sich das in Sachen geschwindigkeit da wirklich schon? Denn ein Case ist nicht immer schneller.

himitsu 19. Mai 2009 20:32

Re: Procedure beenden
 
selbst mit IFs wäre kein EXIT nötig, wenn man das ELSE verwenden würde :angel:

Helmi 19. Mai 2009 20:38

Re: Procedure beenden
 
auch bei "case" wäre kein exit notwendig:

Delphi-Quellcode:
case pos of
  1:begin
      button1.Top := 120;
      button1.Left := 8;
      pos := 2;
    end;
  2:begin
      //usw..

oki 19. Mai 2009 20:41

Re: Procedure beenden
 
Zitat:

Zitat von Fussball-Robby
Zitat:

Zitat von Forlan
Delphi-Quellcode:
if pos = 1 then
begin
  button1.Top := 120;
  button1.Left := 8;
  pos := 2;
  exit;
end;
so sollte es auch besser aussehen...[/Edit]

Und noch besser:
Delphi-Quellcode:
case pos of
  1:begin
      button1.Top := 120;
      button1.Left := 8;
      pos := 2;
      exit;
    end;
  2:begin
      //usw..
(Wie Dax bereits sagte)

Das Exit erscheint mir aber in beiden Varianten recht überflüssig. Einfach das Pferd von hinten aufzäumen.
Delphi-Quellcode:
case Pos of
  4 : begin
      ...
  end;
  ...
  1 : begin
      ...
  end;
  5 : begin
      ...
  end;
end;
Gruß oki

Fussball-Robby 19. Mai 2009 20:55

Re: Procedure beenden
 
Zitat:

Zitat von Helmi
auch bei "case" wäre kein exit notwendig:

Zitat:

Zitat von oki
Das Exit erscheint mir aber in beiden Varianten recht überflüssig.

War nur ein Copy&Paste-Fehler. Es ist klar, dass das Exit überflüssig ist, denn beim case-of-statement wird in jedem Fall nur ein Codeblock angesprungen.

himitsu 19. Mai 2009 21:04

Re: Procedure beenden
 
wozu denn das weiterzählen selber übernehmen?

Delphi-Quellcode:
case Pos of
  0 : begin
    button1.Top := 120;
    button1.Left := 8;
  end;
  1 : begin
      ...
  end;
  ...
  4 : begin
      ...
  end;
end;
Pos := (Pos + 1) mod 5;




procedure TForm1.FormCreate(Sender: TObject);
begin
  pos := 0;
end;
oder in "länger" (für 1 bis 5)
Delphi-Quellcode:
case Pos of
  ..
end;
Inc(Pos);
if Pos > 5 then Pos := 1;
oder
Delphi-Quellcode:
case Pos of
  ..
end;
if Pos < 4 then Inc(Pos)
else Pos := 1;
oder
oder
oder
...

oki 19. Mai 2009 21:09

Re: Procedure beenden
 
Zitat:

Zitat von Fussball-Robby
Zitat:

Zitat von Helmi
auch bei "case" wäre kein exit notwendig:

Zitat:

Zitat von oki
Das Exit erscheint mir aber in beiden Varianten recht überflüssig.

War nur ein Copy&Paste-Fehler. Es ist klar, dass das Exit überflüssig ist, denn beim case-of-statement wird in jedem Fall nur ein Codeblock angesprungen.

Jetzt werd ich doch unsicher. Wenn ich Pos in der Case-Anweisung auf einen nachfolgenden Wert korrigiere :gruebel:

Nee, klar, bei case ist das unerheblich. Nur bei den if-Anweisungen würde es einem ohne Exit auf die Füße fallen, außer man macht es so, wie es himitzu vorgeschlagen hat.

Gruß oki

omata 19. Mai 2009 22:29

Re: Procedure beenden
 
Exit ist unnötig.

oki 20. Mai 2009 06:16

Re: Procedure beenden
 
Zitat:

Zitat von omata
Exit ist unnötig.

mit den if-Anweisungen aber nur wie himitsi es beschrieben hat oder bei Nutzung der else-Zweige.

Gruß oki

uligerhardt 20. Mai 2009 09:29

Re: Procedure beenden
 
Zitat:

Zitat von SirThornberry
hmm, ein case bei 5 Werten ist grenzwertig. Lohnt sich das in Sachen geschwindigkeit da wirklich schon? Denn ein Case ist nicht immer schneller.

Bei der Wahl case/if kommt es doch (im Normalfall) nicht auf die Geschwindigkeit an. Der resultierende Code soll lesbar und verständlich sein. Und da ist ein case meist besser als eine if-else-Kaskade.

vip11 20. Mai 2009 14:00

Re: Procedure beenden
 
Also ich hab mich jetzt für die case variante entschieden da es von der geschwindigkeit ausreicht und auch schön übersichtlich ist.
Eigentlich war das Prog nur als kleine übung gedacht, da sieht man mal wieder wie schnell man sowas verlernt :oops:
aber läuft jetzt alles :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 Uhr.

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