Ik heb het volgende probleem, waar ik maar niet uit kom.
Ik wil namelijk events doorlussen van Object E, via Object S naar Object D. Object S is het koppelobject, welke verwijzingen naar Object D en Object E. Het koppelen van het event (welke in Object E binnenkomt en doorgegeven moet worden aan Object S) gaat in Object S fout.
Ik zal mijn verhaal met code ondersteunen:
Interface E
Code:
IObjectE = interface(IInterface)
//blabla
function get_onHerkendeTekst: THerkendeTekst;
procedure set_onHerkendeTekst(AHerkendeTekst: THerkendeTekst) ;
property onTekst: THerkendeTekst read get_onHerkendeTekst write
//blabla
end;
Object E
Code:
TObjectE = class(TObject, IObjectE, IDisposable)
private
FHerkendetekst: THerkendeTekst;
//blabla
public
function get_onHerkendeTekst: THerkendeTekst;
procedure set_onHerkendeTekst(AHerkendeTekst: THerkendeTekst) ;
property onTekst: THerkendeTekst read get_onHerkendeTekst write set_onHerkendeTekst;
Constructor Create;
procedure Dispose;
//blabla
end;
Constructor TObjectE.Create;
begin
inherited;
//blabla
include(invoer.InpuEvent, onTekst);
end;
Procedure TObjectE.Dispose;
begin
exclude(invoer.InputEvent, onTekst);
//blabla
end;
Object S
Code:
TObjectS = class(TObject)
private
FObjectE: IObjectE;
FObjectD: TObjectD;
FHerkendetekst: THerkendeTekst;
//blabla
public
function get_onHerkendeTekst: THerkendeTekst;
procedure set_onHerkendeTekst(AHerkendeTekst: THerkendeTekst) ;
property onTekst: THerkendeTekst read get_onHerkendeTekst write set_onHerkendeTekst;
constructor create;
//blabla
end;
constructor TObjectS.Create;
var tempObject: IInterface;
begin
tempObject := CreateObject(ObjectGUID);
Supports(tempObject, IObjectE, FObjectE);
Include(FObjectE.onTekst, onTekst);
//blabla
end;
De event van Object S moet de gekregen tekst op zijn beurt forwarden naar Object D.
De instantie FObjectE in Object S wordt op deze manier gemaakt omdat er meerdere soorten van TObjectE kunnen bestaan. Dit is zeg maar een soort plugin. En om de basisfunctionaliteit van deze diverse plugins aan te kunnen spreken, test ik of de interface IObjectE ondersteunt wordt en roep ik de functies van deze interface aan, zodat deze van FObjectE aangeroepen worden (welke plugin dit ook moge zijn, zolang die de desbetreffende interface maar ondersteunt).
Bovenstaande code gaat echter bij Include(FObjectE.onTekst, onTekst) fout.
Deze regel pakt de compiler niet en als foutmelding wordt er gegeven: E2299 Property required
Naar mijn mening is er een property meegegeven, dus ik zie niet in waar deze melding op kan slaan. Of heeft dit te maken met het feit dat ik de property van een instantie van een interface meegeef???
Het is een heel verhaal geworden. Hopelijk is het een beetje duidelijk en is er iemand die wat licht op deze zaak kan schijnen
Alvast bedankt
Bookmarks