Mam problem ze swoją XControl. Kontrolka składa się z suwaka i przycisku. Przeciągnięcie suwaka w górę powinno dać na wyjściu kontrolki TRUE, tak samo jak przyciśnięcie przycisku - problem ten mam opanowany. Jednak kontrolka, gdy zostanie włączona i suwak jest w pozycji górnej to daje się wyłączyć poprzez kliknięcie w obszar kontrolki, pomimo, że w evencie "mouse down ?" za pomocą opcji Discard odfiltrowuję tą zmianę. Powinno to nastąpić dopiero po przeciągnięciu suwaka w dół.
Wie ktoś jaka może być przyczyna takiego zachowania?
Dodam, że próbowałem na najróżniejsze sposoby oprogramować tą kontrolkę, jednak zawsze występuje ten błąd, że jeśli kliknie się włączoną kontrolkę to się ona wyłącza. Gdy jest wyłączona i się ja klika to tak jak powinna nie zmienia stanu, dopiero po przeciągnięciu myszą w górę.
Niezrozumiałe zachowanie Xcontrol
- mariuszl2
- Posty: 17
- Rejestracja: 05 lip 2011 11:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: PolSl
Niezrozumiałe zachowanie Xcontrol
- Załączniki
-
- Kontrolki.rar
- (122.8 KiB) Pobrany 571 razy
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Niezrozumiałe zachowanie Xcontrol
To wyłączenie kontrolki następuje w evencie "Vertical Point Slide, Pane - Mouse Up". To, że robisz discard na Mouse Down nie oznacza, że zdarzenie odkliknięcia nie zostanie wyłapane.
Inna (niezwiązana) sprawa: do zapamiętywania stanu kontrolki służy State.ctl, który w Facade przekazywany jest jako Display State In/Out. Te zmienne lokalne i "sztuczne" kontrolki są zupełnie niepotrzebne i zaciemniają program (jeszcze inna sprawa, że nazwanie ich Flag 1 i Flag 2 zupełnie nic nie mówi). W momencie, kiedy zmieniasz jakąś wartość w stanie, trzeba ustawić flagę "State Changed?" w klastrze Action (tam, gdzie jest "Data changed?").
Inna (niezwiązana) sprawa: do zapamiętywania stanu kontrolki służy State.ctl, który w Facade przekazywany jest jako Display State In/Out. Te zmienne lokalne i "sztuczne" kontrolki są zupełnie niepotrzebne i zaciemniają program (jeszcze inna sprawa, że nazwanie ich Flag 1 i Flag 2 zupełnie nic nie mówi). W momencie, kiedy zmieniasz jakąś wartość w stanie, trzeba ustawić flagę "State Changed?" w klastrze Action (tam, gdzie jest "Data changed?").
- mariuszl2
- Posty: 17
- Rejestracja: 05 lip 2011 11:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: PolSl
Re: Niezrozumiałe zachowanie Xcontrol
Wielkie dzięki PiDi ! Nareszcie rozumiem jak dokładnie tych XControlek używać Problemy jakie miałem z tą kontrolką wydają się teraz banalne, a kod dużo bardziej przejrzysty.
- mariuszl2
- Posty: 17
- Rejestracja: 05 lip 2011 11:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: PolSl
Re: Niezrozumiałe zachowanie Xcontrol
Nie chcę zakładać nowego tematu dotyczącego tej samej kontrolki wiec pisze tu:
Co zrobić by wyzerować kontrolkę wtedy, kiedy podczas zmieniania jej stanu (przeciągania myszą) wyjedziemy poza obszar kontrolki?
W wysłanym przeze mnie przykładzie gdy przeciąga się suwak do góry, zmienia on kolor w momencie, w którym przeciągnęło się go odpowiednio wysoko, co sygnalizuje nam, że można go już puścić i nastąpi przełączenie stanu. Jeśli jednak zamiast puścić wtedy tą kontrolkę wyjedzie się przytrzymaną myszą poza jej obszar, to kontrolka się wiesza.
Próbowałem to zrobić poprzez event mouse leave ale nie ma wogóle reakcji.
Jakieś pomysły?
Co zrobić by wyzerować kontrolkę wtedy, kiedy podczas zmieniania jej stanu (przeciągania myszą) wyjedziemy poza obszar kontrolki?
W wysłanym przeze mnie przykładzie gdy przeciąga się suwak do góry, zmienia on kolor w momencie, w którym przeciągnęło się go odpowiednio wysoko, co sygnalizuje nam, że można go już puścić i nastąpi przełączenie stanu. Jeśli jednak zamiast puścić wtedy tą kontrolkę wyjedzie się przytrzymaną myszą poza jej obszar, to kontrolka się wiesza.
Próbowałem to zrobić poprzez event mouse leave ale nie ma wogóle reakcji.
Jakieś pomysły?
- wino
- Posty: 549
- Rejestracja: 23 gru 2005 00:00
- Wersja środowiska: Nie mam LabVIEW
- Lokalizacja: Kraków
Re: Niezrozumiałe zachowanie Xcontrol
Musisz to zdarzenie obsłużyć poza kontrolką w zewnętrznej strukturze Event.