Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przechwycenie Zmiany Statusu.
Konnekt | Forum > Developerzy > Tworzenie wtyczek
weer
Witam. Jak przechwycić moment zmiany statusu gg kogoś na liście? tzn chciałbym pobrać w tym momencie UIN, nazwę i nowy status (z opisem lub bez, obojętnie) tej osoby ? smile.gif
Mucha
Musisz w IMessageProc obsłużyć komunikat IM_CNT_STATUSCHANGE, który przekazuje strukturę sIMessage_StatusChange.
weer
No ok, mam , potrafie wyświetlić że jakis kontakt zmienił status, teraz pytanie jak pobrac CNT_UID i jaki ma status (CNT_STATUS ?)
Mucha
Masz w tej strukturze status i cntid, GETCNTC(cntid,CNT_UID) zwróci Ci UID.
weer
No tak i w tym jest problem, bo mi zwraca status jaki był przed zmianą, nie wiem dlaczego :/ Widze że piszesz też w delphi wtyczki, więc większa prwadopodobność że mi pomożesz (fakt, bo to nie jest pomorze:P)smile.gif
CODE

    IM_CNT_STATUSCHANGE:
      begin
            for i := 0 to ICMessage(IMC_CNT_COUNT) -1 do
            begin
              if (GETCNTI(i, CNT_UID) = 2863974) then
              begin      
                id := GETCNTI(i, CNT_STATUS);

              If id = ST_ONLINE then buff := 'Dostępny';
              If id = ST_OFFLINE then buff := 'Niedostępny';
              If id = ST_AWAY then buff := 'Zaraz wraca';

              If buff <> '' then
              begin
                ICMessage(IMI_INFORM , Integer(PChar(buff)));
                ret := IM_MSG_delete;
              end;      
              end;    
            end;      
      end;


Teoretycznie działa, ale tak jak mówie - zwraca mi status jaki był przed zmianą, a ja chce ten po zmianie smile.gif
Mucha
Sprawdź czy pod msg.p2 nie masz kodu statusu. I pamiętaj że statusy są flagowane tzn
CODE
if (status and ST_ONLINE <> 0) then //znaczy że ktoś jest online
Jeśli pod msg.p2 nie ma kodu statusu to pod msg.p1 masz wskaznik na ta strukturę
CODE
var
sisc: sIMessage_statuschangePtr;
begin
sisc := sIMessage_statuschangePtr(msg.p1);
status := sisc^.status; //id...
Z pamięci piszę, mogą być błędy.
weer
Nie ma funkcji sIMessage_statuschangePtr; :/ jest za to sIMessage_StatusChange, więc spróbowałem, ale przy

CODE
sisc := sIMessage_statuschange(msg.p1);


Wyskakuje błąd "Invalid typcast" :/
Mucha
Ptr -> wskaźnik, zobacz jak to zrobione jest w innych komunikatach i dopisz analogicznie. Poszukaj po źródłach, może gdzieś masz przykład.
weer
Konnekt mi sie wysypuje przy tym :/ no ale ok jesczcze pokombinuje, ale mam takie pytanie -> czy funkcja init() jest wykonywana tylko raz, i tylko przy starcie konnekta?
winthux
QUOTE(weer @ 4.02.2007 - 10:42) *

czy funkcja init() jest wykonywana tylko raz, i tylko przy starcie konnekta?


jest wywoływana tylko przy ładowaniu wtyczki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2012 Invision Power Services, Inc.