AGB  ·  Datenschutz  ·  Impressum  







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

Liste von proceduren

Ein Thema von Alexander I · begonnen am 8. Mär 2016 · letzter Beitrag vom 9. Mär 2016
Antwort Antwort
Alexander I

Registriert seit: 16. Mai 2014
18 Beiträge
 
Delphi XE5 Starter
 
#1

Liste von proceduren

  Alt 8. Mär 2016, 15:59
Hallo,

weiß jemand wie man eine Liste von proceduren erstellt?

Herrauskommen soll so was wie:
Delphi-Quellcode:
procedurenKette.Add(procedure1);
procedurenKette.Add(procedure2);
procedurenKette.Add(procedure3);
und der Aufruf:

Delphi-Quellcode:

procedurenKette.Do

mit :

Delphi-Quellcode:
procedure Add(procedure);
begin
Liste(i).Add(procedure);
end;

procedure Do;
begin
for i:=0 to anzahlDerÜbergebenenProceduren do
Liste(i);
end;

Danke und Gruß.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Liste von proceduren

  Alt 8. Mär 2016, 16:02
Hallo,

Das sollte so gehen:
Delphi-Quellcode:
type
  TProcedure = procedure;

  TProcedureList = class(TList<TProcedure>) // uses Generics.Collections für TList<T>
  public
    procedure Do;
  end;

procedure TProcedureList.Do;
var i: Integer;
begin
  for i:=0 to Count-1 do
    Items[i]();
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General ( 9. Mär 2016 um 13:06 Uhr)
  Mit Zitat antworten Zitat
Alexander I

Registriert seit: 16. Mai 2014
18 Beiträge
 
Delphi XE5 Starter
 
#3

AW: Liste von proceduren

  Alt 9. Mär 2016, 12:44
Vielen Danke.

Ich hab das jetzt so gelöst.

Delphi-Quellcode:

type

  TKinematic = procedure(x, y, z: double) of Object;

  TTransformation = record
    LinkProcedure: TKinematic;
    x, y, z: double;
  end;

  TKinematicChain = class(TList<TTransformation>)
  public

    procedure AddKinematic(transformation: TKinematic; x, y, z: double);

    constructor Create;
    destructor destroy;
  end;

implementation

{ TKinematicChain }

procedure TKinematicChain.AddKinematic(transformation: TKinematic; x, y, z: double);
var
  transform: TTransformation;
begin
  transform.LinkProcedure := transformation;
  transform.x := x;
  transform.y := y;
  transform.z := z;
  Add(transform)
end;

end.
Aufgerufen wird das ganze so :

Delphi-Quellcode:
  kette := TKinematicChain.Create;
  kette.AddKinematic(glGrafik.Translate, 0, 0, -40);
  kette.AddKinematic(glGrafik.Rotate, 0, -45, 0);
Was mich jetzt dabei stört ist, dass ich gerne die übergebenen Methoden:

Delphi-Quellcode:
 kette.AddKinematic( glGrafik.TranslateF, 0, 0, -40 );
 kette.AddKinematic( glGrafik.Rotate, 0, -45, 0 );
so aufrufen würde :

Delphi-Quellcode:
 kette.AddKinematic( glGrafik.TranslateF ( 0, 0, -40 ) );
 kette.AddKinematic( glGrafik.Rotate ( 0, -45, 0 ) );
mit :

Delphi-Quellcode:
TKinematicChain = class(TList<TKinematic>)
...
procedure TKinematicChain.AddKinematic(transformation: TKinematic);
begin
  Add(transform)
end;

Da bekomme ich aber Fehlermeldungen. Der mag die Parameter (x, y, z: double) nicht.

Kurz und gut : Ich würde gerne auf das record verzichten und die Methode mit Parametern direkt in der Kette speichern.

Ideen?? Vorschläge??

Gruß.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Liste von proceduren

  Alt 9. Mär 2016, 12:58
So geht es nicht.
Die einzige Möglichkeit wie du quasi die Procedure direkt mit Parametern abspeichern könntest wäre so:

Delphi-Quellcode:
type
  TKinematic = reference to procedure;

TKinematicChain = class(TList<TKinematic>);

//Aufruf:
kette.Add(procedure begin glGrafik.TranslateF ( 0, 0, -40 ) end);
Ob dir das besser gefällt ist natürlich ne andere Frage, das procedure begin ... end würde mich mehr nerven, als kette.AddKinematic( glGrafik.TranslateF, 0, 0, -40 );
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General ( 9. Mär 2016 um 13:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#5

AW: Liste von proceduren

  Alt 9. Mär 2016, 12:58
Das kann nicht gehen, denn glGrafik.TranslateF ( 0, 0, -40 ) führt diese Funktion aus und übergibt dann dessen Result (eine Prozedur hat kein Result, also knallt das da) an AddKinematic, aber du willst doch den Funktionszeiger gespeichert haben, oder doch dessen Rückgabe?

Also im Prinzip wie Michael es zeigt, wobei man das auch über einen "statischen" Wrapper machen kann, anstatt mir einem Anonymen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Alexander I

Registriert seit: 16. Mai 2014
18 Beiträge
 
Delphi XE5 Starter
 
#6

AW: Liste von proceduren

  Alt 9. Mär 2016, 13:20
Danke.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 14:17 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