Nazwa serwisu się zgadza, następuje wykonanie kodu w warunkach i do tego momentu jest dobrze. Następnie wykonuję AQQ_SYSTEM_NEWSSOURCE_UPDATE i tu robi się problem - funkcja za każdym razem zwraca -1, a co za tym idzie: serwis nadal pozostaje w tym samym stanie aktywności.
function OnNewsActive(wParam, lParam: DWord): Integer; stdcall; begin // Użytkownik włączył lub wyłączył nasze źródło na liście powiadomień. // Zapisujemy ostatni stan aby przy kolejnym starcie // prawidłowo wypełnić strukturę NewsData w OnModulesLoad. if (PWideChar(wParam) = NEWS_ID1) then begin if lParam = 0 then begin // Źródło wyłączone. (nie mylić z usuniętym) NewsData.Active:=false; end else begin // Źródło włączone (aktywne) NewsData.Active:=true; end; PluginLink.CallService(AQQ_SYSTEM_NEWSSOURCE_UPDATE, DWORD(@NewsData), DWORD(PWideChar(WideString(NEWS_ID1)))); //zwrot -1 end; end;
Jestem prawie pewny, że to ja coś źle robię. Wywołanie AQQ_SYSTEM_NEWSSOURCE_UPDATE w OnModulesLoad wg. przykładu Oconnela działa poprawnie. Tam dodatkowo występuje zmiana ID:
NewsData.ID := NEWS_ID2; tmp := NEWS_ID2; // stare ID PluginLink.CallService(AQQ_SYSTEM_NEWSSOURCE_UPDATE, DWORD(@NewsData), DWORD(PWideChar(WideString(NEWS_ID1))));Przy czym zastosowanie tego (zmiana ID) w OnNewsActive nie daje nadal żadnych efektów (zwrot -1).
Wg. komentarza powinienem zachować tylko informację o stanie na jaki został zmieniony, stan aktywności jednak przy zmianie nie jest zachowywany (po zamknięciu okienka "Źródła powiadomień" i jego ponownym przywróceniu nadal mam status jaki źródło miało przed zmianą)
Mam nadzieję, że udało mi się jasno nakreślić problem.