Strona 1 z 1

funkcja włącz razem...

: 13 mar 2006 14:30
autor: witl
Witam
mam taki wydawało by się prosty problem, mam przełączniki on/off i obok pola do zaznaczenia. Jeżeli załącze jeden przełącznik z zaznaczonym polem to chcę zeby załączyły sie równierz inne przy których jest zaznaczone pole - takie zmostkowanie przełączników z zaznaczonym polem, patrz plik.

Re: funkcja włącz razem...

: 13 mar 2006 20:12
autor: bogdani
Witaj
Wydaje mi się że to działa. Ten zielony klocek to Conditional Auto-Indexing Tunnel z palety OpenG Array Tools. Pochodzi on z zestawu OpenG.
Reszta standardowa z LV.
bogdani

Re: funkcja włącz razem...

: 13 mar 2006 20:37
autor: jogurt_owocowy
Można też spróbować coś takiego. Sprzężone ze sobą kontrolki są zebrane w tablicę klastrów: checkbox-kontrolka.
Gdy nastąpi zmiana wartości takiej tablicy obsługa takiego zdarzenia wygląda tak(rys.):
W pętli While na zasadzie porównania starej i nowej wartości tablicy jest sprawdzane czy użytkownik zmienił wartość kontrolki czy checkboxa przy niej. I w jednym i drugim przypadku (XOR-XOR-OR) pętla kończy się(bo więcej różnic nie ma) i wychodzą z niej dwie zmienne:
Górna(czy modyfikacja...) mówi czy należy zabawić się w zmostkowanie kontrolek. Ma wartość TRUE jeśli użytkownik zmienił wartość kontrolki (nie checkboxa) AND checkbox przy zmienionej kontrolce jest zaznaczony.
Dolna zmienna(nowa wartość...) ma znaczenie tylko kiedy górna jest TRUE i mówi jaką nową wartość ma zmieniona kontrolka.

Jeśli "górna" jest równa TRUE to uruchamia się pętla for przepisująca do kolejnych kontrolek albo "dolną zmienną" jeśli checkboxy przy nich są zaznaczone, albo ich stare wartości jeśli są odznaczone.

Dałoby się to zrobić zwięźlej wyłuskując z tablicy Kontrolki wartości kolejnych checkboxów i kontrolek w postaci tablic i operując na całych takich tablicach zamiast na kolejnych elementach.

Pozdrawiam

Re: funkcja włącz razem...

: 15 mar 2006 12:52
autor: witl
dzięki za ciekawe propozycje.
Pierwszy program przerobiłem wyciągając z dodatkowego bloczka kod na zewnątrz. Ale prog ma ten mankament ze nieda się wyłączyć kontrolki z zaznaczonym checkboxem - trzeba najpierw odznaczyć czekboxa, nie mam pomysłu jak to przerobić.
Drugi probram jest wolny od tej wady i działa super ale pojawił sie inny problem... mianowicie w moim programie do którego chcę zastosowac wspomniana funkcję jest kilka kontrolek podpiętych pod jedno zdarzenie (potrz variant.gif) i pod oldval i newval mam jakis variant! ki diabeł??? co to takiego i jak z tego wyciągnąć odpowiednie dane??

Re: funkcja włącz razem...

: 15 mar 2006 15:01
autor: jogurt_owocowy
Jeśli robisz obsługę kilku kontrolek różnych typów pod jednym eventem OldVal i NewVal są wyrażone w postaci takiego "typu uniwersalnego".
Musisz wartości OldVal i NewVal "zrzutować" na typ swojej kontrolki (w tym wypadku tablica klastrów boolean-boolean) za pomocą funkcji Communication->ActiveX->Variant To Data. Do wejść variant takich klocków podłącz Varianty OldVal i NewVal, do wejścia type stałą utworzoną na kontrolce Kontrolki, a na wyjściu dostaniesz "normalne" wartości kontrolek.

Re: funkcja włącz razem...

: 16 mar 2006 10:20
autor: witl
nie rozumiem za bardzo:
do wejścia type stałą utworzoną na kontrolce Kontrolki
podpiąłem pod type stałą taka jak potrzebna kontrolka i program owszem, nie wykazał błędu i uruchomił sie ale wywalił taki komunikat:

Re: funkcja włącz razem...

: 16 mar 2006 11:08
autor: jogurt_owocowy
Pisząc poprzedniego posta odnosiłem się do mojego rozwiązania, w którym użyta jest tablica klastrów. Wtedy wyglądałoby to tak jak na rys.
A poza tym, żeby uniknąć informacji o błędzie w postaci takiego wyskakującego okienka na wyjściach error out bloczków Variant to Data utwórz kontrolki (tzn. indicatory;) ). No i oczywiście odpowiednio uzależnij wykonywanie dalszych operacji w evencie od wystąpienia/braku błędów w tych bloczkach za pomocą Case'a.

Pozdrawiam

Re: funkcja włącz razem...

: 16 mar 2006 15:27
autor: witl
ok, niby działa... ale jesli skopiuję kontrolki i mam dwa takie same typy to funkcja "variant to data" wybiera sobie tą która sie zmieniana, nie mozna jakoś jednoznacznie zidentyfikować które dane maja być wyciągane z varianta?

Re: funkcja włącz razem...

: 16 mar 2006 22:10
autor: jogurt_owocowy
Wtedy OldVal i NewVal to właśnie wartości zmienianej(w końcu o to chodzi w evencie) kontrolki tyle, że "spłaszczone" do varianta. Chcąc otrzymać ich "normalną" postać musisz je "rozpłaszczyć" przy pomocy Variant to Data.
"nie mozna jakoś jednoznacznie zidentyfikować które dane maja być wyciągane z varianta?" - nie ma co definiować, bo w takim evencie w variantach OldVal i NewVal
przy obsłudze zmiany wartości danej kontrolki jest wartość tylko jednej kontrolki jednocześnie-tej która była źródłem eventa. Czy może chodzi Ci o to, żeby przy wywołaniu jednego eventu wspólnego dla kilku kontrolek wykonywał się różny program w zależności od kontrolki będącej źródłem?

Re: funkcja włącz razem...

: 17 mar 2006 13:11
autor: witl
Właśnie o to mi chodzi! jeśli mam dwie kontrolki i każda z nich potrzebna jest do wykonania innego zadania, ale muszą byc w jednym evencie, to to nie działa dobrze.

W poprzednim programie są kontrolki: "kontrolki" i "kontrolki2", zmieniając wartosci tych drugich powoduję zmiane pierwszych (trzeba troche pokombinować). Teoretycznie kontrolki2 wiszą w powietrzu i nie powinny mieć wpływu na nic...

wydaje mi się że więcej tu wymyśleć się nie da i będę musiał rozdzielić eventy.

Re: funkcja włącz razem...

: 17 mar 2006 16:52
autor: jogurt_owocowy
Oczywiście, że da się wymyślić. A tak na marginesie to dlaczego chcesz mieć to wszystko w jednym evencie?

Re: funkcja włącz razem...

: 20 mar 2006 10:35
autor: witl
no sprytne rozwiazanie...
a jednego eventa trzymam się z powodu wygody, mój program zrobił sie dość rozbudowany i nie chciało mi sie połowy przebudowywać (ale moze nie byłoby tak źle). No i dzieki temu dowiedziałem sie paru przydatnych rzeczy, w każdym razie wielkie dzięki za pomoc :D .