Witam.
Piszę program , klienta IRC z użyciem Indy 9 .
Napotkałem dwa problemy , których rozwiązania nie mogę odnaleźć ani w sieci, ani też w książkach o delphi.
procedure TForm1.IdIRC1Names(Sender: TObject; AUsers: TIdIRCUsers;
AChannel: TIdIRCChannel);
var
i : integer ;
begin
ListBox1.Clear;
for i := 0 to AUsers.Count -1 do
listbox1.Items.Add(AUsers.Items[i].Nick);
Powyższa procedura wykonuje się po wejściu na kanał. Działa bez zarzutu, jednak w wypadku gdy ktos wchodzi lub wychodzi z kanału nic się nie dzieje. Nie uaktualnia się . Co gorsza, po wykonaniu komendy
idirc1.raw('names #NAZWAKANALU');
serwer zwraca aktualną listę użytkowników , lecz tylko na komponencie Memo. Listbox pozostaje niezmieniony. Czytałem o wywołaniu procedury , lecz nie mam pojęcia jak to zrobić. Nawet w "Delphi 2005" zagadnienie to jest opisane bardzo ogólnie - lecz po wpisaniu
procedure TForm1.IdIRC1Join(Sender: TObject; AUser: TIdIRCUser;
AChannel: TIdIRCChannel);
idirc1.onnames ( Tak sie nie da )....
begin
memo1.Lines.Add(AUser.Nick+' dołączył do kanału.');
wyskakuje błąd składni.
Zaś takie coś
procedure TForm1.IdIRC1Join(Sender: TObject; AUser: TIdIRCUser;
AChannel: TIdIRCChannel);
begin
memo1.Lines.Add(AUser.Nick+' dołączył do kanału.');
idirc1.OnNames;
zwraca błąd zbyt małej liczby danych procedury idirc1.onnames....
Pomocy.
Problem drugi :
Wg specyfikacji IRC serwer okresowo wysyła sygnał ping dla sprawdzenia czy użytkownik jest wciąż podłączony. Przy odczycie RAW z idIRC widać to, jednak zdarza się że program przestaje reagować. A to jest wysoce niepożądane - w założeniu program siedzi w trayu i poprzez komponent CooltrayIcon powiadamia użytkownika o nadchodzącej wiadomości . A niestety w przypadku nieaktywności tak się nie dzieje.
Domyślam się że zapewne zostanę wyśmiany, lecz mimo to liczę że ktoś kompetentny mi pomoże.