Próbowałem zrozumieć wszystkie informacje i zgubiłem się. Patrzyłem na Delphi (Pascal), C, C ++, java ... nic nie jest jasne, więc po miesiącu jest to problem, jak go widzę. Mogę być całkowicie zboczony, więc proszę powiedz mi ... grzecznie, proszę.
Jeden nadawca zdarzenia, jeden catcher, o ile nadawca rejestruje catcher. Mam 4 okna dialogowe, które muszą być aktualizowane za każdym razem, gdy plik (którego kod obsługi znajduje się w innym module niż 4 okna dialogowe) ulegnie zmianie. Rozważałem aktualizację każdego z nich w staroświecki sposób, ale potem przyjrzałem się zdarzeniom Delphi i obsłudze wiadomości. Zobaczmy:
Plik F (nadawca) skończył czytać i powinien powiadomić Dialog 1..4 o fakcie, że są teraz dane do wyświetlenia i użytkownika do zabawy. Co jest najlepsze?
Spróbuj zarejestrować okna dialogowe 1..4 jako nasłuchiwanie i sprawić, by nadawca w jakiś sposób wywołał OnUpdatedDataEvent?
Spróbuj wysłać wiadomość przez system, mając nadzieję, że Dialogi 1..4 ją złapią?
Zwróć uwagę, że zdarzenie zachowuje powiązania, podczas gdy wiadomości nie ... i są trudne do debugowania.
I zastanawiam się, w jaki sposób blok kodu File będzie mógł zarejestrować 4 słuchacze (okna dialogowe)?
To, na co patrzę, to możliwość wywołania kaskadowego, co oznacza, że dzwoniący dzwoni do jednego słuchacza, który dzwoni do następnego ... aż do końca łańcucha. Zastanawiam się nawet, czy to w ogóle możliwe.
Przykład:
Powiedz plik F to lista języków. Teraz DialogBox 1 robi coś z listą (na przykład dodaje nowy język); to pole kombi aktualizuje plik F; to z kolei wyzwala DataUpdatedEvent. 4 okna dialogowe zawierają, powiedzmy, TComboBoxes, które wyświetlają listę języków, gdy się pojawiają. Chcę, aby 4 pola zauważyły zmianę i zaktualizowały swoją własną zawartość pola kombi o świeżo zaktualizowany plik ... bez martwienia się o to, skąd pola kombi wiedzą, że muszą odświeżyć swoją zawartość. Jeśli zadziała zgodnie z założeniami, parametr Sender zostanie przeniesiony, a okno dialogowe, które wywołało zdarzenie dataUpdateEvent, zostanie pominięte, ponieważ zostanie już zaktualizowane. W końcu if sender = self, a następnie przejdź do następnego programu obsługi zdarzenia, powinno być łatwe do zaimplementowania.
Wszystko to dlatego, że chcę ćwiczyć mózg ... aby zapobiec chorobie Alzheimera, dodam, że niezbyt skuteczne.