AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Funktionen in Array

Ein Thema von zeras · begonnen am 13. Okt 2019 · letzter Beitrag vom 18. Nov 2019
Antwort Antwort
Seite 1 von 2  1 2   
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.162 Beiträge
 
Delphi 10.3 Rio
 
#1

Funktionen in Array

  Alt 13. Okt 2019, 19:14
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;
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
383 Beiträge
 
#2

AW: Funktionen in Array

  Alt 13. Okt 2019, 20:03
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.

Geändert von samso (13. Okt 2019 um 20:06 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
518 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Funktionen in Array

  Alt 13. Okt 2019, 20:09
Fehlt da nicht ein of object ?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
383 Beiträge
 
#4

AW: Funktionen in Array

  Alt 13. Okt 2019, 20:16
Fehlt da nicht ein of object ?
Nöh, das sind normale Funktionen und keine Methoden.

Geändert von samso (13. Okt 2019 um 20:18 Uhr)
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.162 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Funktionen in Array

  Alt 13. Okt 2019, 20:21
Danke, das werde ich dieser Tage mal probieren.
Sieht aber so aus, dass ich es nutzen kann.
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
2.177 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Funktionen in Array

  Alt 14. Okt 2019, 13:33
Die Statemachine mit Funktionen, s.u., ist dafür zu gebrauchen,
oder besser gleich eine State-Machine-Klasse,
z.B. die hier
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
611 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Funktionen in Array

  Alt 14. Okt 2019, 15:58
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.
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.162 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Funktionen in Array

  Alt Gestern, 16:44
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.
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
519 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Funktionen in Array

  Alt Gestern, 16:49
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);
Thomas Mueller
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.162 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Funktionen in Array

  Alt Gestern, 17:13
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.
Es ist nie falsch das Richtige zu tun!
- Mark Twain

Geändert von zeras (Gestern um 17:33 Uhr) Grund: Ergänzung
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf