Einzelnen Beitrag anzeigen

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