Results 1 to 3 of 3

Thread: Doorlussen van events

  1. #1

    Doorlussen van events [Solved]

    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
    Last edited by briene; 17-Jul-08 at 10:18. Reason: Probleem is opgelost

  2. #2
    Include en Exclude gebruik je alleen bij multi-cast events. Jij hebt single-cast events. Die twee kan je niet mixen. Dus gebruik gewoon een toekenning (FObjectE.OnTekst := OnTekst; ) als je single-cast wilt. Of gebruik bij de property OnTekst add en remove ipv read en write als je multi-cast wilt.

    PS: Zelf IDisposable implementeren is onnodig. Het hebben van een destructor is genoeg om IDisposable door de compiler te laten implementeren. Als je Free aanroept zal via IDisposable de destructor aangeroepen worden.

    En Supports wordt eigenlijk niet meer gebruikt in .Net. Gewone typecasts, as en is werken ook gewoon.
    We adore chaos because we like to restore order - M.C. Escher

  3. #3
    Is een multi-cast waar maar 1 event aan toegekend niet single-cast?:P

    Maar goed, ik heb de constructie "FObjectE.OnTekst := OnTekst;" gebruikt en het ziet er naar uit dat dit werkt: ik kan het event doorsturen.
    Ik zou durven zweren dat ik deze oplossing ook geprobeerd had, maar dat deze toen niet werkte:S Maar goed, ik zal wel iets over het hoofd gezien hebben.

    In ieder geval bedankt voor je hulp en je tips!!

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •