Strona 1 z 2
labview w tray'u
: 03 sie 2004 21:12
autor: tomekw
czy ktos moglby mi pomoc z przeniesieniem uruchomionego vi do tray'a ?!
myslalem o uzyciu API ale hm... nie bardzo wiem jak sie za to zabrac.
LabvIEW do traya
: 03 sie 2004 21:37
autor: bogdani
Witaj
Ludzie z LAVA na swoim forum poruszyli ten temat i chyba znaleźli rozwiązanie.
Można o tym poczytać
tutaj.
bogdani
Re: LabvIEW do traya
: 03 sie 2004 23:29
autor: Mikrobi
[quote="bogdani"] Ludzie z LAVA na swoim forum poruszyli ten temat i chyba znaleźli rozwiązanie. Można o tym poczytać
tutaj. [/quote] Rozmawialiśmy tam tylko o wrzuceniu do tray'a ikonki. Tutaj można zastosować opcję VISerwera nazywaną demonem
i dołożyć do tego ActiveX wykonany przez STI. Oczywiście pojawia się pytanie jakie operacje ma wykonywać VI
pozdrawiam Mikrobi
Re: LabvIEW do traya
: 04 sie 2004 08:10
autor: tomekw
[quote="Mikrobi"] Oczywiście pojawia się pytanie jakie operacje ma wykonywać VI
pozdrawiam Mikrobi[/quote]
VI bedzie nasluchiwal na porcie TCP i po odebraniu odpowiedniego pakietu zamykal system.
Zrobilem aplikacje ktora to realizuje ale pod Delphi, cala rzecz w tym aby teraz to samo zrobic w Labview. Dam znac o rezultatach
Re: LabvIEW do traya
: 04 sie 2004 16:28
autor: Mikrobi
[quote="tomekw"][quote="Mikrobi"] Oczywiście pojawia się pytanie jakie operacje ma wykonywać VI
pozdrawiam Mikrobi[/quote]
VI bedzie nasluchiwal na porcie TCP i po odebraniu odpowiedniego pakietu zamykal system.
[/quote]
czyli wystarczy prosty trik: [img]
http://layer.uci.agh.edu.pl/~mikrobi/la ... ycieVI.png[/img] oprócz Invoke Node można stosować Property Node (FP.Open=FALSE) ale panowie z NI tego nie zalecają i faktycznie działa to nie najlepiej.
Aplikacja (już jako *.exe) nie będzie widoczna z wyjątkiem paska zadań - tego nie udało mi się jeszcze rozwiązać - jednak próba naciśnięcia na pasku przycisku z etykietą aplikacji nie wywoła jej panelu.
Jeszcze jedna uwaga - aplikacja która korzysta z powyższego rozwiązania
powinna wykorzystywać
w wersji ostatecznej bloczek 'Quit LabVIEW' , w przeciwnym wypadku uruchomiona w wersji *.exe będzie mogła być zamknięta jedynie z poziomu menadżera zadań.
pozdrawiam Mikrobi p.s. tak, oczywiście, vi w
trayu... niebawem podeślę opis o którym wspominano na LAVA'ie (ActiveX STI) Nie ma już (ten jest z przed 2000 roku) takich porządnych darmowych ocx'ów...
: 05 sie 2004 17:32
autor: tomekw
No wiec STI dziala i mi wystarczy mozliwosc zamkniecia programu tylko przez menadzera zadan, ikonka w tray'u jest wiec widze ze program dziala - o to chodzilo
Fajnie by bylo jednak znalezc rozwiacanie poprzez Call Library Function Node lub CIN.
Dzieki za pomoc.
: 06 sie 2004 12:28
autor: Mikrobi
[quote="tomekw"]No wiec STI dziala i mi wystarczy mozliwosc zamkniecia programu tylko przez menadzera zadan, ikonka w tray'u jest wiec widze ze program dziala - o to chodzilo
.[/quote] Więc gratulacje
8)
[quote="tomekw"] Fajnie by bylo jednak znalezc rozwiacanie poprzez Call Library Function Node lub CIN.[/quote]
Czyli cos takiego co stworzył komercyjnie George Zou jako G-Toolbox (1999 rok), niestety jego download plików do ikonki w trayu nie działa:
http://www.geocities.com/gzou999/
Aktualizacja strony była ostatnio w lipcu - można więc zakładać że email jest aktualny
.
pozdrawiam Mikrobi
: 06 sie 2004 13:36
autor: tomekw
[quote="Mikrobi"]Czyli cos takiego co stworzył komercyjnie George Zou jako G-Toolbox (1999 rok), niestety jego download plików do ikonki w trayu nie działa:
http://www.geocities.com/gzou999/
Aktualizacja strony była ostatnio w lipcu - można więc zakładać że email jest aktualny
.
pozdrawiam Mikrobi[/quote]
dokladnie tak, wszystko jest pod linkiem RegisterNow a dema pod:
http://www.geocities.com/gzou999/demo.htm
: 09 sie 2004 13:32
autor: tomekw
eh... uparlem sie na tego tray'a
posiedzialem przy tym troche i zrobilem tak polowicznie narazie przy pomocy Call Library Function Node.
Doszedlem do tego:
- funkcja odpowiedzialna za ikone w tray'u to Shell_NotifyIcon w bibliotece shell32.dll
- ze wzgledu na typ argumentow przekazywanych do funkcji nie mozna raczej wywolac jej bezposrednio (przynajmniej mi cos takiego sie nie udalo, probowalel przy pomocy klastra i "Adapt to Type")
generalnie napisalem nowa biblioteke DLL, w ktorej odwoluje sie do funkcji Shell_NotifyIcon a co za tym idzie nie moge bezposrednio w labview zmieniac wlasnosci ikony np. jaka ikona. Trzeba to robic w bibliotece, no ale coz posiedze jeszcze troche przy tym i sie zrobi wszystko.
nie zrobilem jeszcze obslugi komunikatow tej ikonki wiec moze sie pojawiac i znikac plus tip.
Jezeli komus uda sie stworzyc klaster przy pomocy ktorego bedzie mozna wywolac bezposrednio funkcje z shell32.dll to niech sie pochwali.
: 17 paź 2004 19:25
autor: rumcajs
Hej.
Tomek daj znać na
romekn@poczta.onet.pl a wyślę ci sampla zrzucającego ikonkę do traya. Trudno to po prostu wytłumaczyć.
Przed wywołaniem Shell_notifyicon() z shell32.dll trzeba załadować ikonę do pamięci za pomocą LoadIcon() - dla ikonek systemowych lub LoadImage() dla ikonek własnych aby otrzymać wymagany do niej uchwyt, następnie zbudować strukturę Notifyicondata (zdaje się z tym miałeś problemy) i wywołać Shell_notifyicon().
Programik umieszcza ikonkę w trayu waraz z tooltipem, który możesz modyfikować (ikonkę również) w celu wizualizacji działania twojego programu. Okno z programem najlepiej schować tak jak wspomniał Microbi za pomocą HideFrontPanel. Aby usunąć belkę aplikacji z paska zadań, stwórz plik .ini o takiej samej nazwie jak twój plik .exe, i umieść w nim sekcję [nazwa mojego pliku exe bez rozszerzenia] w której powinien być wpis HideRootWindow=TRUE.
Pozdrówka.
Rumcajs
P.S. Czy ktoś wie jak odbierać eventy od myszki nad ikonką w trayu (np, lewy ,prawy klawisz myszy) przez aplikacjęw LV ?
Próbowałem używać WIndows Messaging Queue ale działa tylko w obszarze okna aplikacji.
: 18 paź 2004 10:44
autor: PMaj
Witam
[quote]Czy ktoś wie jak odbierać eventy od myszki nad ikonką w trayu (np, lewy ,prawy klawisz myszy) przez aplikacjęw LV ?[/quote]
Przykład jest poniżej [img]
http://plus.ds14.agh.edu.pl/~pmaj/image ... ampled.jpg[/img]
Widoczna tu kontrolka Boolean to dodatkowa "zmienna" której wartość będzie się zmieniała wraz z zarejestrowanym zdażeniem nad ikoną w tray'u - dopiero zmiana tej kontrolki będzie generowała obsługiwany w programie event. Dostępne zdarzenia od ikony w tray'u są wymienione tam gdzie podpinamy STI - wystarczy kliknąć myszą i wybrać co nas interesuje
Do "Register Event Callback" podpięty jest VI wygenerowany z menu spod prawego przycisku myszy - kursor myszy nad "VI Ref" i tu wybieramy "Create Callback VI" - utworzony VI należy otworzyć i uzupełnić np. w następujący sposób (trzy pierwsze ikony ustawione pionowo są generowane domyślnie przez środowisko):
[img]
http://plus.ds14.agh.edu.pl/~pmaj/image ... t_vi1d.jpg[/img]
Powoduje to oczywiście zmianę stanu kontrolki Boolean i co ważne - podpięcie do Property Node do Value (SGN) - czyli sygnalizowanie zmiany wartości.
Odebrane zdarzenie rejestrowane jest w głównym VI i podpęte do zdarzenia użytkownika w pętli event. Zmiana nazwy zdarzenia to zmiana nazwy kontrolki Boolean
Pozdrawiam
: 18 paź 2004 15:07
autor: rumcajs
Hej !
Fajnie i pięknie to wygląda ale potrzeba LV przynajmniej 6.1 aby to zrobić w tej postaci, a ja mam 6.0.2 i nie chcę używać obcych Active X, które nie działają (na pewno eventy) w 6i pod win98.
Chciałbym to zdziałać bezpośrednio.
Niemniej dzięki, ten sposób jest wszem i wobec znany.
Romek.
: 18 paź 2004 15:11
autor: rumcajs
Sorki. ktoś kto zaczynał od 3.11 nie jest przyzwyczajony do takich bajerów jakie daje 7.1.
Romek.
: 18 paź 2004 15:29
autor: Mikrobi
[quote="rumcajs"]Sorki. ktoś kto zaczynał od 3.11 nie jest przyzwyczajony do takich bajerów jakie daje 7.1. Romek.[/quote] Zaczynałem od 5ki i nie nazwał bym obsługi zdarzeń, czyli programowania opartego na zdarzeniach, "bajerkami". To jest obecny w środowisku mechanizm, który właśnie daje możliwość obsługi tego o co pytałeś.
Sposób jest pod LabVIEW6.1 i wyższe, ale zasadniczo - o ile dobrze przepracowałem ten problem - we wcześniejszych wersjach nie ma możliwości obsługi zdarzeń generowanych przez ikonę w tray'u. Metoda jest dla ActiveX'a STI, ale pracuje to w sposób o jakim mowa w głównym pytaniu, z poziomu środowiska czyli według tematyki tego forum. STI bylo stworzone dość dawno - powinno pracować w win98 bez problemów. Można przecież również zrobić bibliotekę w C lub C++ i odpowiednio przygotować funkcje tak by zwracały informacje o zdarzeniach z tray'a w postaci stringów, które odebrane zostaną w LV i odpowiednio obsłużone. Zakladamy jednak że nie chodzi o metodę w C lub C++ tylko o LabVIEW.
: 19 paź 2004 12:20
autor: tomekw
No tak koledzy PMaj i rumcajs ale to działa tylko do STI (activex), a co w przypadku bezpośrednio wywoływanego Shell_notifyicon w CLF lub CIN ?