Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Function mit mehreren Rückgabewerten (https://www.delphipraxis.net/157726-function-mit-mehreren-rueckgabewerten.html)

SyntaxXx 22. Jan 2011 13:06

Function mit mehreren Rückgabewerten
 
Hallo Leute, heute habe ich mal wieder eine Frage:

Ich habe nun eine eigene function geschriebenm, inder ich aber mehrere Rückgabewerte bekomme.
Jetzt ist die Frage, wie ich auf diese zugreifen kann, da ja Result nur einen Wert wiedergibt?

Um es ein wenig zu vereinfachen hier ein kleines Beispiel (Nur gerade aus den kopf geschrieben)

Code:
function MoreResults:string;
begin
a := 1;
b := 2;
end;
Wie kann ich nun in einer anderen Function auf a und b zugreifen?

Wie gesagt, mit Result bekomme ich ja nur einen Wert zurück.

Ich hoffe ihr könnt mir helfen

Klaus01 22. Jan 2011 13:13

AW: Function mit mehreren Rückgabewerten
 
Hallo,

Du könntest als Result ein Record verwenden.

Grüße
Klaus

WM_CLOSE 22. Jan 2011 13:17

AW: Function mit mehreren Rückgabewerten
 
entweder du deklarierst einen Record
Delphi-Quellcode:
type
  TDeinRecord=record
    x:Integer;
    y:Integer;
  end;
oder du übergibst der function Var-Parameter
Delphi-Quellcode:
function DeineFuction(var x:Integer; var y:Integer)
begin
  x:=1;
  y:=2;
end;
Dabei musst du die variablen aus der aufrufenden funktion übergeben:
Delphi-Quellcode:
DeineFunction(ergebnisx,ergebnisy);

Sir Rufo 22. Jan 2011 13:27

AW: Function mit mehreren Rückgabewerten
 
Zitat:

Zitat von WM_CLOSE (Beitrag 1076541)
oder du übergibst der function Var-Parameter
Delphi-Quellcode:
function DeineFuction(var x:Integer; var y:Integer)
begin
  x:=1;
  y:=2;
end;
Dabei musst du die variablen aus der aufrufenden funktion übergeben:
Delphi-Quellcode:
DeineFunction(ergebnisx,ergebnisy);

Eine Function muss immer einen Rückgabewert haben, also wird das so nicht gehen

Delphi-Quellcode:
procedure DeineFuction(var x:Integer; var y:Integer);
begin
  x:=1;
  y:=2;
end;

SyntaxXx 22. Jan 2011 13:31

AW: Function mit mehreren Rückgabewerten
 
Hmmm habs jetzt so:

Code:
function TForm1.MoreResults(var value2 : integer);
begin
Result := 1;
value2 := 2;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(MoreResults);
showmessage(IntToStr(MoreResults(Value2)));
end;
Jedoch ist die zweite Messagebox immer leer

Luckie 22. Jan 2011 13:32

AW: Function mit mehreren Rückgabewerten
 
Das dürfte gar nicht kompilieren.

Sir Rufo 22. Jan 2011 13:36

AW: Function mit mehreren Rückgabewerten
 
Zitat:

Zitat von SyntaxXx (Beitrag 1076545)
Hmmm habs jetzt so:

Code:
function TForm1.MoreResults(var value2 : integer);
begin
Result := 1;
value2 := 2;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(MoreResults);
showmessage(IntToStr(MoreResults(Value2)));
end;
Jedoch ist die zweite Messagebox immer leer

Und nach über 100 Beiträgen sollte man auch die Delphi-Tags kennen
Delphi-Quellcode:
function TForm1.MoreResults(var value2 : integer);
begin
Result := 1;
value2 := 2;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(MoreResults);
showmessage(IntToStr(MoreResults(Value2)));
end;

Sir Rufo 22. Jan 2011 13:46

AW: Function mit mehreren Rückgabewerten
 
Um aber auch was konstruktives einzuwerfen hätte ich noch folgendes:

Delphi-Quellcode:
type
  TMoreResults = record
    a,b : integer;
    function Show : string;
  end;

function TMoreResults.Show : string;
begin
  Result := Format( 'Das Ergebnis ist %d und %d', [ a, b ] );
end;

function MoreResults( ParameterA, ParameterB : integer ) : TMoreResults;
  begin
    Result.a := ParameterA;
    Result.b := ParameterB;
  end;

procedure TForm1.Button1Click( Sender : TObject );
  begin
    ShowMessage( MoreResults( 1, 2 ).Show );
  end;
es geht sogar noch schöner :mrgreen:
Delphi-Quellcode:
type
  TMoreResults = record
    a,b : integer;
    class operator implicit( const mr : TMoreResults ) : string;
  end;

class operator TMoreResults.implicit( const mr : TMoreResults ) : string;
begin
  Result := Format( 'Das Ergebnis ist %d und %d', [ mr.a, mr.b ] );
end;

function MoreResults( ParameterA, ParameterB : integer ) : TMoreResults;
  begin
    Result.a := ParameterA;
    Result.b := ParameterB;
  end;

procedure TForm1.Button1Click( Sender : TObject );
  begin
    ShowMessage( MoreResults( 1, 2 ) );
  end;

hoika 22. Jan 2011 13:57

AW: Function mit mehreren Rückgabewerten
 
Hallo,

du hast wohl auch eine Form-Variable value2.

Delphi-Quellcode:
function TForm1.MoreResults(var theValue2 : integer): Integer;
begin
  Result := 1;
  theValue2 := 2;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  iResult: Integer;
  iValue2: Integer;
begin
  iResult:= MoreResults(iValue2);
  showmessage(IntToStr(iResult));
  showmessage(IntToStr(iValue2));
end;
Und ja, dein Code in der IDE war anders, als du ihn hier gezeigt hast.


Heiko

Meflin 22. Jan 2011 14:05

AW: Function mit mehreren Rückgabewerten
 
Ich gehe mal davon aus das sollte:

Zitat:

Zitat von SyntaxXx (Beitrag 1076545)
Code:
function TForm1.MoreResults(var value2 : integer): integer;
begin
Result := 1;
value2 := 2;
end;

heißen, aber... :kotz:

Schlimmer gehts nimmer! Entweder man schreibt sich eine Prozedur und hat Seiteneffekte. Oder man schreibt sich eine Funktion. Aber die Vermischung von beidem ist einfach... siehe oben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:59 Uhr.
Seite 1 von 2  1 2      

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