Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi function in procedure (https://www.delphipraxis.net/90433-function-procedure.html)

moperswings 17. Apr 2007 13:37


function in procedure
 
Hallo,

kann ich nicht eine Funktion auch innerhalb einer Procedure laufen lassen?
Ich habe ein einfaches Bsp, aber die Funktion hat nicht genügend Parameter?
Was muss ich denn noch ausser der summe weitergeben?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  function summe(var a,b: Integer): Integer;
  begin
        a := strtoint(Edit1.text);
        b := strtoint(Edit2.Text);
        result := a + b;
  end;

var   wert: Integer;
begin
        wert := summe; //() nicht genügend wirkliche Parameter;
        Label1.Caption := inttostr(wert);
end;

end.
Grüsse, moperswings

chaosben 17. Apr 2007 13:41

Re: function in procedure
 
Lösung:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  function summe(): Integer;
  var a,b: Integer; //:)
  begin

        a := strtoint(Edit1.text);
        b := strtoint(Edit2.Text);
        result := a + b;
  end;

var   wert: Integer;
begin
        wert := summe; //() nicht genügend wirkliche Parameter ... war gestern :)
        Label1.Caption := inttostr(wert);
end;

end.

hsg 17. Apr 2007 13:44

Re: function in procedure
 
korrekt wäre es so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  function summe(): Integer;
  var a,b: Integer;
  begin
        a := strtoint(Edit1.text);
        b := strtoint(Edit2.Text);
        result := a + b;
  end;

var   wert: Integer;
begin
        wert := summe; //() nicht genügend wirkliche Parameter;
        Label1.Caption := inttostr(wert);
end;

end.

Die Muhkuh 17. Apr 2007 13:45

Re: function in procedure
 
Naja, sehr toll ist das ja nicht, das hier wäre um einiges besser:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  function summe(const a, b: Integer): Integer;
  begin
     result := a + b;
  end;
var   wert: Integer;
begin
        Label1.Caption := inttostr(summe(5,5));
end;

moperswings 17. Apr 2007 13:56

Re: function in procedure
 
Vielen Dank, aber warum muss ich die Variablen seperat deklarieren?

Matze 17. Apr 2007 13:58

Re: function in procedure
 
Schau dir das Beispiel der Muhkuh an, es geht auch, wie du es gerne hättest. Du hast bei dir lediglich vergessen der Funktion die Parameter zu übergeben.

Der Aufruf wäre dann beispielsweise dieser:

Delphi-Quellcode:
Label1.Caption := inttostr(summe(StrToInt(Edit1.Text), StrToInt(Edit2.Text)));

moperswings 17. Apr 2007 14:01

Re: function in procedure
 
Um die Parameter gings mir ja! Ich ging davon aus, dass die mit der function summe übergeben werden.
Nur die Variablen in der procedure nochmal zu deklarieren macht ja auch keinen Sinn!

Matze 17. Apr 2007 14:10

Re: function in procedure
 
Wenn du das gerne so hättest, geht auch das hier, wobei mir so eine Lösung nicht sonderlich gefallen würde:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  function summe: Integer;
  begin
    result := StrToInt(Edit1.Text) + StrToInt(Edit2.text)
  end;
begin
  Label1.Caption := IntToStr(summe);
end;

moperswings 17. Apr 2007 14:19

Re: function in procedure
 
Die Lösungen sind alle klasse, aber darum geht es mir nicht mehr! Ich will verstehen, warum es falsch war, die Variablen in der Funktion zu deklarieren, damit mir solche Fehler in Zukunft nicht mehr passieren!

Klaus01 17. Apr 2007 14:23

Re: function in procedure
 
Alle Variablen die in einer Funktion deklariert werden sind nur in dieser sichtbar, das war aber nicht Dein Fehler.

Du hast die Variablen in der Parameterliste der Procedure deklariert und die Funktion ohne Parameter aufgerufen.

Grüße
Klaus

moperswings 17. Apr 2007 14:32

Re: function in procedure
 
Hallo Klaus,

den Fehler sehe ich nicht und kann ihn so nicht verstehen! Ich sehe nur, das chaosben und hsg die Variablen aus der Funktion rausgenommen haben. Sonst sind die Codes doch identisch, wenn ich mich nicht versehe! Könntest Du es mir erklären!

Luckie 17. Apr 2007 14:36

Re: function in procedure
 
Der Fehler hat nichts mit Nested Functions zu tun. Deine Funktion sum hat zwei Parameter erwartet. Du hast sie aber ohne Parameter aufgerufen. Wie soll das Funktionieren?

Klaus01 17. Apr 2007 14:37

Re: function in procedure
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

  function summe(var a,b: Integer): Integer;  //<-- hier hast Du a und b in der Parameterlist deklariert
  begin
        a := strtoint(Edit1.text);
        b := strtoint(Edit2.Text);
        result := a + b;
  end;

var   wert: Integer;

begin
        wert := summe; //<-- hier rufst Du die Funktion ohne Parameter auf
        Label1.Caption := inttostr(wert);
end;

end.
Das was Muhkuh in seinem Beitrag geschrieben hat, ist letztendlich das wie es sein sollte.
Denn Du nutzt die Parameter nicht wirrklich, du fragst in Deiner Funktuion summe irgendwelche Editfelder ab,
das geht rein formal ist aber nicht schön.

Grüße
Klaus

moperswings 17. Apr 2007 14:44

Re: function in procedure
 
Aha, mein Denkfehler lag darin, dass ich nicht wusste, dass es einen Unterschied zwischen den Variablen in einer Parameterliste gibt und der Variablendeklaration! Werde mich jetzt nochmal mit der Parameterliste beschäftigen! Vielen Dank Klaus und Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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-2025 by Thomas Breitkreuz