Jo, merci erst mal ... obschon das alles nicht zum Ziel geführt hat ... mich dünkt wohl auch warum ...
Hmm, ich hätte auch gedacht, dass T in dem Fall TButton entspricht und entsprechend T.Create(nil) möglich sein müsste.
Ist das dann als Bug bzw. fehlendes Feature anzusehen oder geht das Problem vom Konzept her völlig in Ordnung?
Ich denke mal nicht, denn in der generischen Klasse ist TButton nicht bekannt sondern nur abstrakt als T (irgendwas ab TComponent).
Nachfahren von TComponent können aber auch den Constructor überschreiben:
Delphi-Quellcode:
TMyComponent = class(TComponent)
public
constructor Create; reintroduce;
end;
und schon gibt es für diese Ableitung kein
Create(AOwner:TComponent)
mehr.
Womöglich ist das so nicht anders machbar, aber da ich auch keine Lust habe für jedwede Ableitung von TComponent ein Interface zu implementieren, behelfe ich mir nun so, dass ich einfach eine Dummy-Instanz beim Erzeugen mitgebe.
(Diese Dummy-Instanz wird dann am Schluss von selbiger einfach ins Nirwana geschickt)
Delphi-Quellcode:
var
MyButton : IGenericLink<TButton>;
begin
MyButton := TGenericLink<TButton>.Create( TButton.Create( nil ) );
MyButton.Link.OnClick := ButtonClick; // jetzt rummst auch nix mehr ... logisch
end;
Nicht schön, aber funktioniert