Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi function mit zwei Rückgabewerten? (https://www.delphipraxis.net/75739-function-mit-zwei-rueckgabewerten.html)

Hansi 24. Aug 2006 10:43


function mit zwei Rückgabewerten?
 
Hey,

Ich habe einen function geschrieben die mir einen Rückgabewert liefert und zwar ein String. Nun möchte ich aber dass die Function mir, wenn ich einen StringA reinliefere, einen StringB und einen IntegerA zurückgibt.

Wie mache ich sowas?

Gausi 24. Aug 2006 10:44

Re: function mit zwei Rückgabewerten?
 
Nimm eine Prozedur mit zwei VAR-PArametern.

TBx 24. Aug 2006 10:47

Re: function mit zwei Rückgabewerten?
 
Delphi-Quellcode:
function MachWas (StringA : String; var IntegerA : integer) : string;
Parameter, die mit var angegeben werden, werden nach Funktionsaufruf an den Aufrufer zurückgegeben.

Hope it helps

onlinekater

shmia 24. Aug 2006 10:51

Re: function mit zwei Rückgabewerten?
 
Alternativ nimmst du einen Record. Dies macht vorallem dann Sinn, wenn es mal mehr wie 2 Rückgabewerte sind oder wenn du schon mehrere Inputparameter hast.
Delphi-Quellcode:
TErgebnis = record
   Name : string;
   Anzahl : integer;
end;
procedure MachWas(var erg:TErgebnis);

Hansi 24. Aug 2006 10:53

Re: function mit zwei Rückgabewerten?
 
Danke euch dreien...

Ich probiere den Ansatz mit dem record mal.

mfg
Hansi

ManuMF 24. Aug 2006 10:57

Re: function mit zwei Rückgabewerten?
 
Ich hätte auch ein Record vorgeschlagen, aber als Rückgabewert:
Delphi-Quellcode:
// Typendefinition
type
  TStringAndInt = Record
    rString: String;
    rInteger: Integer;
  end;

// Irgendwo im Code ;-)

function Test: TStringAndInt;
begin
  result.rString := 'Test';
  result.rInteger := 123;
end;

// Und zum Ausführen

procedure TForm1.Button1Click(Sender: TObject);
var
  Rueckgabe: TStringAndInt;
begin
  Rueckgabe := Test;
  Showmessage(Rueckgabe.rString + ' ' + IntToStr(Rueckgabe.rInteger));
end;
Du musst dazu wie oben im code in der Prozedur / Funktion, die etwas mit dem Rückgabewert machen soll, diesen noch mal als Variable definieren, sonst musst du deine Funktion mehrfach aufrufen:
Delphi-Quellcode:
Showmessage(Test.rString + ' ' + IntToStr(Test.rInteger));
Aber das geht natürlich auf Kosten der Geschwindigkeit.

Helmi 24. Aug 2006 11:01

Re: function mit zwei Rückgabewerten?
 
Hallo

oder du verwendest "out"

Delphi-Quellcode:
procedure Test(out i: Integer; out S: String);
begin
  i := 123;
  S := DP;
end;
[edit]Delphi-Tags vergessen! Sorry! [/edit]

Neutral General 24. Aug 2006 11:34

Re: function mit zwei Rückgabewerten?
 
Zitat:

Zitat von Helmi
Hallo

oder du verwendest "out"

Delphi-Quellcode:
procedure Test(out i: Integer; out S: String);
begin
  i := 123;
  S := DP;
end;
[edit]Delphi-Tags vergessen! Sorry! [/edit]

OT: Aber das muss sein: "Undefinierter Bezeichner 'DP'." :mrgreen:

Also es gibt wie gesagt nur die 2-3 drei Möglichkeiten die ich grad nochmal zusammenfasse damit ich nicht nur OT geschrieben hab :mrgreen:

1. Function gibt ein Record zurück

Delphi-Quellcode:
ABC = record
 A: String
 B: Integer;
 C: Boolean;
end;

function GetaABC: ABC;
begin
 ABC.A := 'Hallo';
 ABC.B := 22;
 ABC.C := true;
end;
2. Proceduren mit Out-Parametern
Delphi-Quellcode:
procedure GiveMeAnA(out AA: String);
begin
 AA:= 'A';
end;
3. Das gleiche mit Var-Parametern.

Gruß
Neutral General

Hansi 24. Aug 2006 11:36

Re: function mit zwei Rückgabewerten?
 
Hallo ManuMF,

Leider habe ich dich an dem einen Punkt mit dem zweifachen aufrufen nicht ganz verstanden.
Bis jetzt habe ich:

Das deklariert:
Delphi-Quellcode:
type
    Ttest = Record
    test_String: String;
    test_Integer: Integer;
  end;
dann die function:
Delphi-Quellcode:
Function test(StringA: String): Ttest;
und rufe über:
Delphi-Quellcode:
s := test(Edit1.Text).test_String;
i := test(Edit1.Text).test_Integer;
die function auf.
Nur wird diese 2x durchlaufen.

Wie kann ich das verhindern?

3_of_8 24. Aug 2006 11:38

Re: function mit zwei Rückgabewerten?
 
Delphi-Quellcode:
with test(Edit1.Text) do
begin
  s := test_String;
  i := test_Integer;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 Uhr.
Seite 1 von 3  1 23      

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