komunikacja miedzy komponentami

0

Chce napisac kilka wspolpracujacych ze soba komponentow.
ogolnie chodzi o to ze jeden z nich bedzie wykonywal jakas prace
i gdy ja zakonczy, to wspolpracujace z nim komponenty wyswietla
rezultaty tej pracy.

problem polega na tym jak rozwiazac komunikacje miedzy komponentami...
Nie moge po prostu wywolac odpowiednich metod gdyz nie znam ilosci
wspolpracujacych komponentow ani tym bardziej ich typow ani nazw.

Wyobrazam sobie to w ten sposob:
Komponen Glowny po zakonczeniu pracy generuje zdarzenie (np MojeZdarzenie)
a komponenty Wyswietlajace reaguja na to zdarzenie (np OnMojeZdarzenie).

Tylko jak to zrobic?
Probowalem uzyc KOMUNIKATOW ROZGLASZAJACYCH opisanych w artykule
http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_5
ale nie udalo mi sie nawet zrealizowac przykladu tam przedstawionego....

Moznaby tez jakos w Glownym komponencie przechowywac liste komponentow Wyswietlajacych.
Wtedy bylby dostep do ich metod, ale wydaje mi sie to rozwiazaniem troche okreznym...
ale moze sie myle...

Moze macie doswiadczenie z takimi problemami albo chociaz pomysly jak je rozwiazac?

0

Możesz w konstruktorze komponentu podrzędnego podawać, który jest dla niego głównym. Dzięki temu ten sam dopisywałby się do listy komponentów wyświetlających.

Skoro jest to banalnie proste w realizacji i szybkie w działaniu, po co kombinować.

0

Dzieki - jest to dobre rozwiazanie tego problemu.

Ale moze ktos wie dlaczego wysylanie komunikatu
za pomoca BROADCAST (do wszystkich komponentow) nie dziala?
(albo co zrobic zeby dzialalo)

Gdyby to zadzialalo uzyskalbym DUZO wieksza
funkcjonalnosc...

Chodzi mi konkretnie o wywolywanie zdarzen
ktore bylyby 'widoczne' przez wszystkie komponenty na danym formularzu

0
const
  WM_OTHERCLICK = WM_USER + 123;
var
  Msg_: TMessage;
begin
  Msg_.Msg    := WM_OTHERCLICK;
  Msg_.WParam := Test;
  Msg_.LParam := longint(Test);
  Msg_.Result := 0;
  Parent.Broadcast(Msg_);

działa OK. To oczywiście wycinek z większej całości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1