Eleganckie zamykanie exe

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Eleganckie zamykanie exe

Post 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
Załączniki
testowy.vi
(60.77 KiB) Pobrany 291 razy
lista_pozycji.vi
(42.78 KiB) Pobrany 291 razy
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Eleganckie zamykanie exe

Post 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 4502 razy
O tym, jaką różnicę robi pytajnik w nazwie eventu, możesz poczytać tutaj.

Pozdrawiam
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Eleganckie zamykanie exe

Post 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ę.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
ODPOWIEDZ