Strona 1 z 1

Eleganckie zamykanie exe

: 18 lut 2010 23:39
autor: smiga
Zrobiłem aplikacje skompilowaną do exe, która ładnie działa ... ale po jakimś czasie zorientowałem się, że w pewnych przypadkach może być "nieelegancko" zamykana X'em w prawym górnym narożniku.
Program działa w ten sposób, że czasami użytkownik chce uaktywnić lub zmienić wygląd "ludzika" a ekranie. Wtedy wyskakuje okienko (pop-up ... nowy VI), w którym jest wybór wspomnianego "ludzika", a program czeka na jego wybranie utrzymując pop-up cały czas aktywnym i najbardziej frontowym oknem. Użytkownik więc dokonuje wyboru zamykając przez to pop-up, a gdy zamknie główne okno programu klikając na X wszystko jest OK.
Możliwy jest jednak przypadek, w którym użytkownik kliknie na X w głównym oknie przy otwartym okienku pop-up. Wtedy następuje to "nieeleganckie" zamknięcie programu, tzn. zamyka się panel główny, a okienko pop-up przechodzi w tryb edycji. Nie można co prawda oglądnąć diagramu z kodem, ale pojawia się standardowe menu na front panelu i możliwość jego rozszerzenia (np. podglądu ukrytych jego wskaźników i kontrolek)
Kilka dni kombinowałem różne metody zamykania tego okienka ... i nic nie osiągnąłem. Może ktoś z Kolegów ma jakiś pomysł ... bo ja już powoli wywieszam białą flagę :)

Poniżej załączam okrojone wersje 2 VI'i , które sprawiają problem. Testowy jest oknem głównym, w którym możemy kliknąć na białego ludzika, aktywując pop-up (lista_pozycji).
W górnej pętli Event są dwie próby zamykania pop_up'a - w Stop i w Panel Close - obie nieskuteczne. Stop potrafi ukryć front panel pop_up'a , ale nie przerywa jego działania przez co program nie może zakończyć dolnej pętli. Jeżeli wstawię tam metodę Abort VI , to po naciśnięciu Stop wyskakuje błąd 1000 (The VI is not in a state compatible with this operation.) W Panel Close wstawiłem tą metodę, ale mam wrażenie, że zamykanie okna X'em nie powoduje tego event'u ... do czwego więc ten event Panel Close?
Co dokładnie dzieje się po zamknięciu okna X'em i jak LabVIEW to obsługuje?

Jeżeli ktoś chce zobaczyć w pełni działający program w wersji exe (niestety z tym możliwym nieeleganckim zamknięciem), to można go pobrać tu:
http://www.pijto.pl/m/IncomeS.zip

Re: Eleganckie zamykanie exe

: 19 lut 2010 00:48
autor: jogurt_owocowy
Kilka dni kombinowałem różne metody zamykania tego okienka ... i nic nie osiągnąłem. Może ktoś z Kolegów ma jakiś pomysł ... bo ja już powoli wywieszam białą flagę
Gdy wszystko inne zawiedzie, sięgnij do helpa ;]
A w nim:
If a user closes the front panel (...) LabVIEW aborts the VI
Do not use the Panel Close notify event for important shutdown code unless you have taken steps to ensure that the VI does not abort when the panel closes. Alternatively, you can use the Panel Close? filter event, which occurs before the panel actually closes.
Zgodnie z sugestią, wystarczy zamienić event Panel Close na Panel Close? i będzie działać jak ta lala:
when panel close event does not doesnt work use filter event instead.png
when panel close event does not doesnt work use filter event instead.png (2.59 KiB) Przejrzano 4501 razy
O tym, jaką różnicę robi pytajnik w nazwie eventu, możesz poczytać tutaj.

Pozdrawiam

Re: Eleganckie zamykanie exe

: 19 lut 2010 19:30
autor: smiga
No cóż, wielokrotnie o tym myślałem, żeby sprawdzić czym one się różnią (Panel Close i Panel Close?) ... ale po co czytać HELP'a :ymblushing:
Bardzo dziękuję za pomoc i dobrą lekcję.