![]() |
Liste von proceduren
Hallo,
weiß jemand wie man eine Liste von proceduren erstellt? Herrauskommen soll so was wie:
Delphi-Quellcode:
und der Aufruf:
procedurenKette.Add(procedure1);
procedurenKette.Add(procedure2); procedurenKette.Add(procedure3);
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ß. |
AW: Liste von proceduren
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; |
AW: Liste von proceduren
Vielen Danke.
Ich hab das jetzt so gelöst.
Delphi-Quellcode:
Aufgerufen wird das ganze so :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.
Delphi-Quellcode:
Was mich jetzt dabei stört ist, dass ich gerne die übergebenen Methoden:
kette := TKinematicChain.Create;
kette.AddKinematic(glGrafik.Translate, 0, 0, -40); kette.AddKinematic(glGrafik.Rotate, 0, -45, 0);
Delphi-Quellcode:
so aufrufen würde :
kette.AddKinematic( glGrafik.TranslateF, 0, 0, -40 );
kette.AddKinematic( glGrafik.Rotate, 0, -45, 0 );
Delphi-Quellcode:
mit :
kette.AddKinematic( glGrafik.TranslateF ( 0, 0, -40 ) );
kette.AddKinematic( glGrafik.Rotate ( 0, -45, 0 ) );
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ß. |
AW: Liste von proceduren
So geht es nicht.
Die einzige Möglichkeit wie du quasi die Procedure direkt mit Parametern abspeichern könntest wäre so:
Delphi-Quellcode:
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 );
type
TKinematic = reference to procedure; TKinematicChain = class(TList<TKinematic>); //Aufruf: kette.Add(procedure begin glGrafik.TranslateF ( 0, 0, -40 ) end); |
AW: Liste von proceduren
Das kann nicht gehen, denn
Delphi-Quellcode:
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?
glGrafik.TranslateF ( 0, 0, -40 )
Also im Prinzip wie Michael es zeigt, wobei man das auch über einen "statischen" Wrapper machen kann, anstatt mir einem Anonymen. |
AW: Liste von proceduren
Danke.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz