obsługa zdarzeń w kopiowanych kontrolkach
: czw wrz 08, 2022 1:10 pm
Witam wszystkich czytających ten tekst. Od dawna próbuję rozwikłać problem podany w tytule. Mimo intensywnych poszukiwań w internecie i dziesiątek przeróżnych prób w aplikacji, nie znalazłem rozwiązania. Natknąłem się wprawdzie na opis tego rodzaju spawy, ale dotyczył JavaScriptu, a zastosowany w OpenOffice Basic nie działa. JavyScript nie poznałem i nie mam czasu na naukę. Ośmielam się więc prosić o pomoc mądrzejszych; sam jestem w programowaniu niezbyt zaawansowanym amatorem.
Stworzyłem w Calcu okno dialogowe jako część większej całości zawierające etykiety, przyciski i pole tekstowe z zarejestrowanym zdarzeniem (kliknięcie myszą uruchamiające inną procedurę). Podczas otwierania okna to pole tekstowe jest powielane wielokrotnie (nowa = pierwsza.Model.CreateClone(), potem oknodni.Model.insertByName(nowa.Name, nowa)) na obszarze okna (konkretnie - każde reprezentuje dzień miesiąca). Wszystko pięknie działa, kontrolki rozkładają się według zamysłu, dostosowują tekst, kolorują się jako jako dni robocze i wolne. Brakuje tylko reakcji na zdarzenia, działa jedynie pierwotna kontrolka. Próby typu nowa.addEventListener(zdarzenie, podprogram_docelowy) powodują uruchomienie tego podprogramu docelowego w trakcie dodawania listenera do pierwszej nowej kontrolki i to kończy sprawę.
Owszem, mogę za pomocą edytora umieścić od razu w oknie trzydzieści jeden takich kontrolek i każdą opatrzyć zdarzeniem. Może tak się ostatecznie sprawa zakończy, ale zaintrygowała mnie kwestia programowego rozwiązania oraz nauki na przyszłość. Poza tym takie wyjście wydaje mi się nieeleganckie. Na marginesie - nie stosuję pól wyboru, bo takie było założenie wizualnej strony okna dialogowego.
We wspomnianym opisie znalazłem również pomysł, aby obsługę zdarzeń przypisać do okna dialogowego jako obiektu nadrzędnego. W OOBasic to też nie działa, próbowałem różnie bez skutku. Czy jest więc możliwość przekazania zdarzenia wzwyż hierarchii? Zaletą byłby jeden listener do wszystkich kontrolek.
Podgląd w czujce wykazał, że same zdarzenia są kopiowane, brakuje widocznie drogi wiążącej z docelowym podprogramem. Jak to zrobić - nie wiem i nie potrafię znaleźć sposobu.
Pozdrawiam - krzymon1
Stworzyłem w Calcu okno dialogowe jako część większej całości zawierające etykiety, przyciski i pole tekstowe z zarejestrowanym zdarzeniem (kliknięcie myszą uruchamiające inną procedurę). Podczas otwierania okna to pole tekstowe jest powielane wielokrotnie (nowa = pierwsza.Model.CreateClone(), potem oknodni.Model.insertByName(nowa.Name, nowa)) na obszarze okna (konkretnie - każde reprezentuje dzień miesiąca). Wszystko pięknie działa, kontrolki rozkładają się według zamysłu, dostosowują tekst, kolorują się jako jako dni robocze i wolne. Brakuje tylko reakcji na zdarzenia, działa jedynie pierwotna kontrolka. Próby typu nowa.addEventListener(zdarzenie, podprogram_docelowy) powodują uruchomienie tego podprogramu docelowego w trakcie dodawania listenera do pierwszej nowej kontrolki i to kończy sprawę.
Owszem, mogę za pomocą edytora umieścić od razu w oknie trzydzieści jeden takich kontrolek i każdą opatrzyć zdarzeniem. Może tak się ostatecznie sprawa zakończy, ale zaintrygowała mnie kwestia programowego rozwiązania oraz nauki na przyszłość. Poza tym takie wyjście wydaje mi się nieeleganckie. Na marginesie - nie stosuję pól wyboru, bo takie było założenie wizualnej strony okna dialogowego.
We wspomnianym opisie znalazłem również pomysł, aby obsługę zdarzeń przypisać do okna dialogowego jako obiektu nadrzędnego. W OOBasic to też nie działa, próbowałem różnie bez skutku. Czy jest więc możliwość przekazania zdarzenia wzwyż hierarchii? Zaletą byłby jeden listener do wszystkich kontrolek.
Podgląd w czujce wykazał, że same zdarzenia są kopiowane, brakuje widocznie drogi wiążącej z docelowym podprogramem. Jak to zrobić - nie wiem i nie potrafię znaleźć sposobu.
Pozdrawiam - krzymon1