Autor Wątek: Dodanie ikonki do kontaktu  (Przeczytany 2271 razy)

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

Offline sWirus

Dodanie ikonki do kontaktu
« dnia: Lipiec 19, 2010, 13:33:15 pm »
...czyli kolejny temat typu "co u licha robię źle". ^^

	
wtwIconSet set;
initStruct(set);
set.iconSetID = L"ICSET/MOJEID";
set.iIcons = 1;
set.pIcons = new wtwGraphics[1];
initStruct(set.pIcons[0]);

//chciałem na początek wykorzystać istniejącą ikonkę:
set.pIcons[0].graphID = WTW_GRAPH_ID_MAIL;
set.pIcons[0].hInst = hInstance;
set.pIcons[0].imageType = 0;
set.iOverlay = 0;
set.pOverlay = NULL;
set.curImage = 0;
set.flags = WTW_ICS_FLAG_PRELOADED;
set.iType = WTW_ICSET_TYPE_PRE_TEXT;

//linijka poniżej na pewno jest źle, bo przy próbie pokazania ikonki powoduje orła wtw
//z tym, że bez niej ikonka nie jest dodawana tak czy siak, a sądzę, że set powinien zostać stworzony
//Pytanie brzmi jak? ^^ Albo raczej, co źle definiuję w Secie?
wtw->fnCall(WTW_ICSET_CREATE,(WTW_PARAM)&set,0);

wtw->fnCall(WTW_CTL_ADD_CONTACT_ICON,(WTW_PARAM)itemHandle,(WTW_PARAM)&set);

WTW wywija orła przy próbie pokazania ikonki, lub (bez przedostatniej linijki) po prostu tej ikonki nie dodaje)

Pytanie brzmi:
Co u licha robię źle i czego powinienem się wstydzić?
Oblałem test Turinga... damn ;/

Offline Kaworu

  • Ryszard
  • Szlachta
  • *
  • Twój Koszmar Senny
    • k2t.eu
Re: Dodanie ikonki do kontaktu
« Odpowiedź #1 dnia: Lipiec 19, 2010, 14:05:03 pm »
	wtwIconSet ics;
initStruct(ics);

ics.iType = WTW_ICSET_TYPE_AFTER_TEXT;
ics.iconSetID = L"XMPP/UserTune";

::pF->fnCall(WTW_ICSET_CREATE, (WTW_PARAM)&ics, NULL);
::pF->fnCall(WTW_ICSET_ADD_IMG, (WTW_PARAM)L"XMPP/UserTune", (WTW_PARAM)WTW_GRAPH_ID_AUDIO);


;P

Offline sWirus

Re: Dodanie ikonki do kontaktu
« Odpowiedź #2 dnia: Wrzesień 18, 2010, 19:21:18 pm »
No ok. powyższe sporo mi powiedziało ^^. Ale teraz co, jeżeli chcemy ustawić ikonkę przy kontakcie na inną ikonkę z setu?

przykład z tego co próbowałem
	initStruct(set);
set.iconSetID = LASTACT_ID_ICSET_ACTIVITIE;
set.iType = WTW_ICSET_TYPE_AFTER_TEXT;
wtw->fnCall(WTW_ICSET_CREATE,(WTW_PARAM)&set,0);
wtw->fnCall(WTW_ICSET_ADD_IMG, (WTW_PARAM)LASTACT_ID_ICSET_ACTIVITIE, (WTW_PARAM)LASTACT_ID_ICON);
wtw->fnCall(WTW_ICSET_ADD_IMG, (WTW_PARAM)LASTACT_ID_ICSET_ACTIVITIE, (WTW_PARAM)LASTACT_ID_ICON_MSG);
wtw->fnCall(WTW_ICSET_ADD_IMG, (WTW_PARAM)LASTACT_ID_ICSET_ACTIVITIE, (WTW_PARAM)LASTACT_ID_ICON_PRES);
wtw->fnCall(WTW_ICSET_ADD_IMG, (WTW_PARAM)LASTACT_ID_ICSET_ACTIVITIE, (WTW_PARAM)LASTACT_ID_ICON_TYPING);

a teraz tak... dodaję set do kontaktu tak:
		wtw->fnCall(WTW_CTL_ADD_CONTACT_ICON,(WTW_PARAM)itemHandle,(WTW_PARAM)&set);

ale co muszę zrobić, żeby zmienić ikonkę?

Myślałem, że coś w tym guście:
		set.curImage = 3;
wtw->fnCall(WTW_CTL_MOD_CONTACT_ICON,(WTW_PARAM)itemHandle,(WTW_PARAM)&set);
ale nie działa. Chyba, że gdzie indziej robię błąd... ale nie bardzo mi się chce próbować w ciemno.
Oblałem test Turinga... damn ;/

Offline Kaworu

  • Ryszard
  • Szlachta
  • *
  • Twój Koszmar Senny
    • k2t.eu
Re: Dodanie ikonki do kontaktu
« Odpowiedź #3 dnia: Wrzesień 19, 2010, 08:22:23 am »
		set.curImage = 3;
wtw->fnCall(WTW_CTL_MOD_CONTACT_ICON,(WTW_PARAM)itemHandle,(WTW_PARAM)&set);

Blisko, ale:

set.flags = WTW_ICONSET_FLAG_MODIFY_CUR_IMAGE;
set.curImage = 3;
wtw->fnCall(WTW_CTL_MOD_CONTACT_ICON,(WTW_PARAM)&set, (WTW_PARAM)itemHandle);

Choć w sumie wcześniej nie zauwazylem, ze dla tej funkcji parametry są odwrotnie. Następna nightly poprawi ;P

Offline Inoex

  • Narybek
  • *
Re: Dodanie ikonki do kontaktu
« Odpowiedź #4 dnia: Wrzesień 23, 2010, 21:00:39 pm »
Próbowałem z tych zlepek wstawić ikonkę i poległem. Przyznaje, że nie rozumiem do końca działania tych setów. Dlatego też, czy można prosić o cały kod (działający) do wstawienia ikonki dla kontaktu, którego uchwyt to itemHandle (ikonka może znajdować się w zasobach wtw np. WTW_GRAPH_ID_PHONE? Z góry dziękuję

Offline sWirus

Re: Dodanie ikonki do kontaktu
« Odpowiedź #5 dnia: Wrzesień 24, 2010, 09:12:04 am »
To będzie pewnie tak:

	#define JAKIS_ID L"Jakis ID"

wtwIconSet set;
initStruct(set);
set.iconSetID = JAKIS_ID;
set.iType = WTW_ICSET_TYPE_AFTER_TEXT; //gdzie ma być ikonka - tutaj zaraz za nazwą kontaktu, inne opcje podane w API
wtw->fnCall(WTW_ICSET_CREATE,(WTW_PARAM)&set,0);
wtw->fnCall(WTW_ICSET_ADD_IMG, (WTW_PARAM)JAKIS_ID, (WTW_PARAM)WTW_GRAPH_ID_PHONE);

//jeśli itemHandle już masz to:
wtw->fnCall(WTW_CTL_ADD_CONTACT_ICON,(WTW_PARAM)itemHandle,(WTW_PARAM)&set);
Oblałem test Turinga... damn ;/

Offline Inoex

  • Narybek
  • *
Re: Dodanie ikonki do kontaktu
« Odpowiedź #6 dnia: Wrzesień 24, 2010, 10:26:33 am »
Dzięki za odpowiedź. Mimo skopiowania Twojego kodu i próbie uruchomienia, ikonka się nie pokazała.

Kod, którym to uruchamiam:

#define ICON_ID L"XMPP/MyIcon"

wtwMessageDef*    pMsg  = (wtwMessageDef *) wL;
wtwContactDef cDef = pMsg->contactData;

WTW_PTR hw = pF->fnCall( WTW_CTL_FND_CONTACT, (WTW_PARAM)&cDef, NULL );  // pobranie itemHandle


        wtwIconSet set;
initStruct(set);
set.iconSetID = ICON_ID;
set.iType = WTW_ICSET_TYPE_AFTER_TEXT;

pF->fnCall(WTW_ICSET_CREATE,(WTW_PARAM)&set,0);  // to zwraca 1
pF->fnCall(WTW_ICSET_ADD_IMG, (WTW_PARAM)ICON_ID, (WTW_PARAM)WTW_GRAPH_ID_PHONE);  // to zwraca 1
pF->fnCall(WTW_CTL_ADD_CONTACT_ICON,(WTW_PARAM)hw, (WTW_PARAM)&set);  // to zwraca 0 (przy próbie zmiany miejscami wP z wL wywala błędem,
więc znaczy, że ma być tak jak jest obecnie



Dodatkowo próbowałem też zamiast hw używać cList.itemHandle (ta sama wartość, ale jak to mówią: tonący brzytwy się łapie):
        [...]
        WTW_PTR hw = pF->fnCall( WTW_CTL_FND_CONTACT, (WTW_PARAM)&cDef, NULL );  // pobranie itemHandle

        wtwContactListItem cList;
initStruct(cList);
pF->fnCall( WTW_CTL_GET_CONTACT, (WTW_PARAM)hw, (WTW_PARAM)&cList );
       
        [...]
       
        pF->fnCall(WTW_CTL_ADD_CONTACT_ICON,(WTW_PARAM)cList.itemHandle , (WTW_PARAM)&set);
Powyższe też zwraca 0 (ikonka się nie pokazuje)


Pytanie dodatkowe:

#define ICON_ID L"XMPP/MyIcon"  <-- jak dobrze rozumiem, jako ID mogę używać dowolnej nazwy, np L"cosDowolnego"?


Win7 x64

Offline sWirus

Re: Dodanie ikonki do kontaktu
« Odpowiedź #7 dnia: Wrzesień 24, 2010, 10:31:26 am »
spróbuj jeszcze dodać flagę

set.flags = WTW_ICS_FLAG_PRELOADED;
Myślałem, że zaraz po stworzeniu set'a nie będzie potrzebna.

ID... takie żeby się nie pokrywało z żadnym już istniejącym... moje zwykle wyglądają tak

L"nazwawtyczki/icon/cosoikonie"
Oblałem test Turinga... damn ;/

Offline Inoex

  • Narybek
  • *
Re: Dodanie ikonki do kontaktu
« Odpowiedź #8 dnia: Wrzesień 24, 2010, 11:22:31 am »
Dzięki, teraz wszystko działa :) flaga była potrzebna.


Pytanie:
Jak po wstawieniu ikonki wykonać odświeżenie listy? bo zauważyłem, że jak lista kontaktów jest widoczna, to ikonka się nie pokazuje (nie ma odświeżenia listy), dopiero po zaznaczeniu kontaktu się pojawia.
Jeżeli okno jest schowane i go otworzymy, ikona się pojawia od razu.


Odp:
Nie wiem na ile to jest prawidłowe rozwiązanie, ale działa :)

    
    [...] // tutaj dodawanie ikonki

    pF->fnCall( WTW_CTL_ENABLE_DRAWING, 1, 0 );  // odświeża liste

« Ostatnia zmiana: Wrzesień 24, 2010, 19:03:55 pm wysłana przez Inoex »