[ komplikator @ 12.01.2012. 07:19 ] @
Pozdrav, ekipa, evo mene sa tjednim pitanjem iz OOP. Opet sam negdje preskočio ili nisam dobro shvatio, a do sada nisam koristio na taj način. Radi se o slijedećem: Imam klasu / objekt koja se brine o nečemu (objektu korisnika - prijave, odjave, učitavanje podataka, pripadnost grupama, ser management, promjena lozinke i još dosta toga). Ta klasa ima jedan od eventa koji se zove UserChanged složen klasičnom pričom: lokalno TNotifyEvent polje vezano na property i metoda kojom okidam lokalno polje. Forme imaju metodu u kojoj nešto odrađujem kad nastupi event TKorisnik.userChanged. Ta metoda jeu konstruktoru forme vezana na event, s time da forma ima lokalno polje tipa TNotifyEvent u koje pospremam stari handle eventa, u proceduri odradim preuzeti event i na kraju odradim ovaj "stari" preuzeti iz lokalne varijable principom OlduserChanged(Self); I ostale forme (kojima je ova main forma gore owner) na isti način nadziru taj event (smisao je da promjena nekog parametra korisniku ili promjena korisnika odmah napravi promjene na izgledu i funkcionalnosti pootvaranih formi u TDI sučelju). Problem je što sve radi, ali... samo sa jednom formom. Ako više od jedne forme/objekta handla event, bez obzira što se radi preusmjeravanje eventa tako da se upamti, odradi nešto svoje i proslijedi event dalje stvar ne funkcionira. Još više me buni, što se event zakači za neku klasu, umjesto za instancu objekta. Primjerice postoji samo forma main, a event se poziva i skače i na neku klasu iz koje u tom trenutku uopće nije stvoren objekt (nije otvarana ta forma). Ima li netko ideju ili riješenje, ne kužim gdje griješim i zašto više formi ne može funkcionirati ovako? Edit: Znam da c# i .NET imaju multiple delegates iliti višestruki event handling, očito se multicast events ne može izvesti u Delphiju, nego treba posegnuti za nekom cakom tipa slanja windows messagea ili neka slična fora. Ne mogu vjerovati da do ovoga nikad nisam došao, tj. nikad to zatrebao. [Ovu poruku je menjao komplikator dana 12.01.2012. u 09:07 GMT+1] |