Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Funktionen in Array (https://www.delphipraxis.net/202250-funktionen-array.html)

zeras 13. Okt 2019 18:14

Funktionen in Array
 
Hallo,

ich habe ein Programm geschrieben, welche mittels einer Case Anweisung nach und nach verschiedene Funktionen ausführt.
In der Case Schleife wurde der Wert immer um eins erhöht und so wurde die nächste Funktion ausgeführt.
Nun muss ich das Programm erweitern, wo teilweise andere Funktionen nötig sind und die Reihenfolge kann auch anders sein.
Ich hatte mir das so gedacht, dass ich verschiedene Arrays habe, wo u.a. die Funktionen deklariert sind. Dann steppe ich durch das ganzze Array durch. Bei der neuen Version fülle ich dann das Array mit anderen Funktionen und anderer Reihenfolge.
Habt ihr da einen Tipp?
Ich hoffe, dass ist ein wenig verständlich.
Hier ein wenig Code:
Delphi-Quellcode:
   case Sequence of
      tCreate               : res := SiCreate;

      tWait4Start           : res := SiWait4Start;

      tGetMaschine          : res := SiGetMaschine;

      tTempPfadDel          : res := SiTempPfadDel;

samso 13. Okt 2019 19:03

AW: Funktionen in Array
 
Deine Idee kann man so formulieren:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

function A: Integer;
begin
  Result := 1;
end;

function B: Integer;
begin
  Result := 2;
end;

function C: Integer;
begin
  Result := 3;
end;

function D: Integer;
begin
  Result := 4;
end;

type
  TMyFunction = function: Integer;

var
  Steps: array of TMyFunction;
  Step: Integer;
  res: Integer;

begin
  SetLength(Steps, 4);
  Steps[0] := A;
  Steps[1] := B;
  Steps[2] := C;
  Steps[3] := D;

  for Step := 0 to High(Steps) do
    res := Steps[Step];

end.

Redeemer 13. Okt 2019 19:09

AW: Funktionen in Array
 
Fehlt da nicht ein
Delphi-Quellcode:
of object
?

samso 13. Okt 2019 19:16

AW: Funktionen in Array
 
Zitat:

Zitat von Redeemer (Beitrag 1449561)
Fehlt da nicht ein
Delphi-Quellcode:
of object
?

Nöh, das sind normale Funktionen und keine Methoden.

zeras 13. Okt 2019 19:21

AW: Funktionen in Array
 
Danke, das werde ich dieser Tage mal probieren.
Sieht aber so aus, dass ich es nutzen kann.

Rollo62 14. Okt 2019 12:33

AW: Funktionen in Array
 
Die Statemachine mit Funktionen, s.u., ist dafür zu gebrauchen,
oder besser gleich eine State-Machine-Klasse,
z.B. die hier

freimatz 14. Okt 2019 14:58

AW: Funktionen in Array
 
Wo siehst du hier States? Für mich riecht das eher nach "pipes and filters".
Das von samso scheint mir als erstes der richtige Ansatz zu sein.

zeras 17. Nov 2019 15:44

AW: Funktionen in Array
 
Ich habe nun die Idee von Samso übernommen, aber festgestellt, dass ich durch Erweiterungen des Programms nun auch Parameter an die Funktionen übergeben muss.

Delphi-Quellcode:
function A(var x1: String; x2: integer; x3: String; x4: String; var x5: String): Boolean;
begin
  Result := True;
end;

function B(var x1: String; x2: integer; x3: String; x4: String; var x5: String): Boolean;
begin
  Result := True;
end;


type
  TMyFunction = function(var x1: String; x2: integer; x3: String; x4: String; var x5: String): Boolean;

var
  Steps: array of TMyFunction;
  Step: Integer;
  res: Integer;

begin
  SetLength(Steps, 2);
  Steps[0] := A; <-- wie muss ich die Funktion hier schreiben, da sie Parameter hat?
  Steps[1] := B;

  for Step := 0 to High(Steps) do
    res := Steps[Step];

end.

dummzeuch 17. Nov 2019 15:49

AW: Funktionen in Array
 
Zitat:

Zitat von zeras (Beitrag 1451451)
Ich habe nun die Idee von Samso übernommen, aber festgestellt, dass ich durch Erweiterungen des Programms nun auch Parameter an die Funktionen übergeben muss.

Delphi-Quellcode:
function A(var x1: String; x2: integer; x3: String; x4: String; var x5: String): Boolean;
begin
  Result := True;
end;

function B(var x1: String; x2: integer; x3: String; x4: String; var x5: String): Boolean;
begin
  Result := True;
end;


type
  TMyFunction = function(var x1: String; x2: integer; x3: String; x4: String; var x5: String): Boolean;

var
  Steps: array of TMyFunction;
  Step: Integer;
  res: Integer;

begin
  SetLength(Steps, 2);
  Steps[0] := A; <-- wie muss ich die Funktion hier schreiben, da sie Parameter hat?
  Steps[1] := B;

  for Step := 0 to High(Steps) do
    res := Steps[Step];

end.

Die Parameter musst Du erste beim Aufruf übergeben:

Delphi-Quellcode:
  for Step := 0 to High(Steps) do
    res := Steps[Step](x1,x2,x3,x4,x5);

zeras 17. Nov 2019 16:13

AW: Funktionen in Array
 
Danke Thomas,

im Beispiel oben (Konsolenprogramm) und den Infos von dir geht es, in meiner Umgebung bekomme ich den Fehler
E2009: Inkompatible Typen: 'Reguläre Prozedur und Methodenzeiger'.

Ich muss mal sehen, was in meinem Programm anders ist, als im Beispielprojekt.

Irgendwie hängt das mit den Funktionen zusammen, da diese noch im private Abschnitt deklariert sind, weil das alles im einem Thread läuft und ich Synchronize benutzen muss.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 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