AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

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
Online

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#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;
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 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)
1.081 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
439 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
Online

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#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
1.456 Beiträge
 
Delphi 11 Alexandria
 
#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
Online

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#8

AW: Funktionen in Array

  Alt 17. Nov 2019, 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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.623 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Funktionen in Array

  Alt 17. Nov 2019, 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
Online

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#10

AW: Funktionen in Array

  Alt 17. Nov 2019, 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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain

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


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:48 Uhr.
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