Autor Wątek: Ikona w tray'u  (Przeczytany 3604 razy)

0 Użytkowników i 1 Gość przegląda ten wątek.

Offline Inoex

  • Narybek
  • *
Ikona w tray'u
« dnia: Wrzesień 23, 2010, 21:07:08 pm »
Próbowałem bawić się z ikoną w tray'u i jak zwylke poległem ;)

        wtwTrayIconDef trayIcon;
initStruct( trayIcon );

trayIcon.flags = WTW_TRAYICON_FLAG_MASK_ICON;
trayIcon.iconID = WTW_GRAPH_ID_SEND_FILE;

pF->fnCall( WTW_TRAYICON_FUNC_CHANGE, (WTW_PARAM)&trayIcon, NULL);

Próbowałem też z WTW_TRAYICON_FUNC_ADDICON ale bez skutku.
Proszę o podpowiedź.

Offline Kaworu

  • Ryszard
  • Szlachta
  • *
  • Twój Koszmar Senny
    • k2t.eu
Re: Ikona w tray'u
« Odpowiedź #1 dnia: Wrzesień 23, 2010, 21:16:38 pm »
Sprawdź czy funkcja WTW_TRAYICON_FUNC_ADDICON istnieje, bo jak tak wlasnie patrze - to może nie być podłaczona do APi ;P Apzoa tym dokumentacja kłamie, trayId jest konieczny;

Offline Inoex

  • Narybek
  • *
Re: Ikona w tray'u
« Odpowiedź #2 dnia: Wrzesień 24, 2010, 05:41:32 am »
Dzięki za szybką odpowiedź.

WTW_TRAYICON_FUNC_ADDICON
WTW_TRAYICON_FUNC_CHANGE  
WTW_TRAYICON_FUNC_REMOVE  

Powyższe funkcje NIE są podpięte do API a to znaczy, że na chwilę obecną nie ma co się zabierać za zabawę z tray'em.
Mam nadzieję, że w najbliższym czasie, coś w tej sprawie się zmieni :)\


UPDATE!
W ostatniej aktualizacji funkcje zostały podpięte i można już z nich korzystać :)
« Ostatnia zmiana: Wrzesień 27, 2010, 07:57:57 am wysłana przez Inoex »

Offline Inoex

  • Narybek
  • *
Re: Ikona w tray'u
« Odpowiedź #3 dnia: Wrzesień 27, 2010, 08:00:40 am »
Pytanie:
1) Czy istnieje możliwość podpięcia eventa do stworzonej ikony (obsługa myszki, czy ikona klinkięta itp. itd.)?
2) Czy można zmienić z poziomu API główną ikonkę programu w tray'u? Bo powyższe funkcje jak rozumiem dają możliwość tworzenia nowych/dodatkowych ikon, niezależnie od głównej.
3) WTW_TRAYICON_FLAG_ANIMATE_BLINK <-- włączenie powyższej flagi powoduje miganie ikoną? włączając ją, ikona się dodaje do tray'a, ale nie miga ani też się nie wyświetla (pokazane jest tylko puste pole).

Offline Kaworu

  • Ryszard
  • Szlachta
  • *
  • Twój Koszmar Senny
    • k2t.eu
Re: Ikona w tray'u
« Odpowiedź #4 dnia: Wrzesień 27, 2010, 09:52:12 am »
1. Tam jet takie sprytne pole callback;
2. Mozna;
3. A bo ja pamietam jak to dzialalo :D

Offline Inoex

  • Narybek
  • *
Odp: Ikona w tray\'u
« Odpowiedź #5 dnia: Wrzesień 28, 2010, 19:01:23 pm »
Dzięki za odpowiedź :)

Czy tak wygląda funkcja wywołująca zmianę? Chodzi dokładnie o przekazywanie parametrów. Żeby coś zmienić, trzeba najpierw znać uchwyt do tego co chcemy zmienić. Ale nie wiem jak go przekazać przez tą funkcję (jako drugi parametr, pierwszy - nie jest opisane w API, więc zgaduje :) ).

wtwTrayIconDef trayIcon;
(...) // init i uzupelnienie danych w strukturze
pF->fnCall( WTW_TRAYICON_FUNC_CHANGE, (WTW_PARAM)&trayIcon, NULL);


UPDATE
Żeby zmieniać ikonkę wystarczy w strukturze zmieniać iconID (trayID musi zostać niezmienione).


(...) init
trayIcon.iconID = WTW_ICON_PHONE;
trayIcon.trayId = TRAY_ICON_ID;
pF->fnCall( WTW_TRAYICON_FUNC_ADDICON, (WTW_PARAM)&trayIcon, NULL);  // <-- dodanie ikony

trayIcon.iconID = WTW_ICON_MOBIL;
trayIcon.trayId = TRAY_ICON_ID;  // <-- ten sam trayID co wcześniej
pF->fnCall( WTW_TRAYICON_FUNC_CHANGE, (WTW_PARAM)&trayIcon, NULL); // <-- zmiana ikony
 



Post scalony: Wrzesień 28, 2010, 21:09:14 pm
Jeżeli chciałbym zmienić główną ikonę programu w tray'u, to trzeba złapać uchwyt głównego okna i potem szukać ID ikonki w tray'u?

Bardzo mile widziany jakiś fragment kodu :)
« Ostatnia zmiana: Wrzesień 28, 2010, 21:09:14 pm wysłana przez Inoex »

Offline amras

  • Narybek
  • *
Odp: Ikona w tray'u
« Odpowiedź #6 dnia: Październik 17, 2010, 12:01:19 pm »
Ładnie/pięknie. Ale mi do pluga brakuje możliwości ukrycia ikony (mamy do wyboru tylko create/change/remove) - chciałbym zwyczajnie schować główną ikonę programu.

Jak rozumiem jedyne co da się zrobić to dobrać się do Shell_TrayWnd i wysłać wiadomość ukrycia przycisku? Czy może w ramach API jest to do zrobienia?

z niewiadomych przyczyn sztuczka z
	
HWND hwndtray;

hwndtray = FindWindow(L"Shell_TrayWnd", 0) ;
hwndtray = FindWindowEx(hwndtray,0, L"ReBarWindow32", 0) ;
hwndtray = FindWindowEx(hwndtray,0, L"SysPager", 0) ;
   ShowWindow(hwndtray,SW_HIDE) ;

ani po dostosowaniu nazwy klasy na ToolBarWindow321 nie działa pod windows 7 - obawiam się, że próby ukrycia pojedynczych ikon w ten sposób też nie zadziałają.

Zatem: pięknie proszę o  WTW_TRAYICON_FUNC_HIDE/SHOW ew. jakieś inne sensowne dojście?
« Ostatnia zmiana: Październik 17, 2010, 12:29:09 pm wysłana przez amras »

Offline suawek

  • Senior Developer
  • Młodzież
  • *
Odp: Ikona w tray'u
« Odpowiedź #7 dnia: Październik 17, 2010, 18:47:04 pm »
W ten sposób nie ukryjesz ikony.
Jednym sposobem mogło by być usunięcie ikony przez WTW_TRAYICON_FUNC_REMOVE, a potem dodanie jej spowrotem. Niestety musiałbyś odkryć trayID, menuID, iconID itp przeglądając listę stringów w wtw.exe.

Offline amras

  • Narybek
  • *
Odp: Ikona w tray'u
« Odpowiedź #8 dnia: Październik 17, 2010, 23:03:23 pm »
I właśnie to miałem na myśli kiedy pisałem "nie da się bez wsparcia w api". Tym bardziej, że usunięcie tej ikony na 99% wywaliłoby komunikator przy np. próbie zmiany stanu przez auto-away, a przy dodaniu trzeba by przywrócić wszystkie jej parametry...

Kaw, proszę :) WTW_MAINTRAYICON_HIDE/SHOW i odpowiednia zmienna przechowująca stan, ok? ._.

Offline sWirus

Odp: Ikona w tray'u
« Odpowiedź #9 dnia: Październik 18, 2010, 07:55:50 am »
Zgłoś to na mantis'a. Prędzej się pojawi.
Oblałem test Turinga... damn ;/

Offline amras

  • Narybek
  • *
Odp: Ikona w tray'u
« Odpowiedź #10 dnia: Październik 18, 2010, 10:44:34 am »
Wczoraj dałem, zobaczymy czy co z tego będzie :P