=========================
Устанавливаем свойства компонентов
=========================
Label1.Caption - "UIN:"
Label2.Caption - "Пароль:"
Edit1.Text/Edit2.Text - ""
Edit1.MaxLength - 9
Edit2.MaxLength - 8
Button1.Caption - "Вход"
Button2.Caption - "Выход"
Memo1.ReadOnly - True
Memo1.ScrollBars - ssVertical
Memo1.Lines - удалить строку Memo1
Timer1.Enabled - False
Timer1.Interval - 110000
ICQClient1.ConvertToPlaintext - True ===================
Соединение с сервером ICQ
===================
Создаем событие OnClick на Button1. Пишем процедуру обработки события:
procedure TForm1.Button1Click(Sender: TObject);
begin
//Проверка правельности заполнения полей
if (Edit1.Text = '') or (Edit2.Text = '') or
(Length(Edit1.Text) < 5) or (Length(Edit2.Text) < 3)
then
begin
MessageDlg('Не правельно заполнены поля!',mtInformation,[mbOk],0);
Exit;
end;
rec := True; //Это глобальная переменная (которую кстати нужно определить). Нужна для различия неудачного соединения и разъединения
ICQClient1.UIN := StrToInt(Edit1.Text);
ICQClient1.Password := Edit2.Text;
ICQClient1.Login(); //Соединяемся с сервером
Memo1.Lines.Add('Соединение с сервером ICQ...');
end;
===============
Проверка соединения
===============
Создаем событие OnLogin для ICQClient1.
procedure TForm1.ICQClient1Login(Sender: TObject);
begin
//Если соединились, то добовляем соответстующее сообщение в Memo1
if ICQClient1.LoggedIn then
begin
Memo1.Lines.Add('Соединение с сервером установлено.');
Timer1.Enabled := True;
end;
end;
====================
Если не удалось соединиться
====================
Создаем событие OnConnectionFailed для ICQClient1.
procedure TForm1.ICQClient1ConnectionFailed(Sender: TObject);
begin
if not rec then Exit; //Если мы нажали на кнопку "Выход", то не нужно пытаться соединиться
Memo1.Lines.Add('Не удалось соединиться с сервером.');
if MessageDlg('Попытаться соединиться еще раз?',mtInformation,[mbOk,mbCancel],0) = mrOk
then
begin
ICQClient1.Login();
Memo1.Lines.Add('Соединение с сервером ICQ...');
end;
end;
==============
Посылаем KeepAlive
==============
Создаем событие OnTimer для Timer1.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ICQClient1.SendKeepAlive;
end;
Отсылать KeepAlive нужно каждые 2 минуты, чтобы чтобы сервер помечал нас как online. Вот для этого и нужен таймер.
==================
Разъединяемся с сервером
==================
Создаем событие OnClick на Button2.
procedure TForm1.Button2Click(Sender: TObject);
begin
if not ICQCLient1.LoggedIn then
MessageDlg('Соединение с сервером не установлено!',mtInformation,[mbOk],0)
else
begin
rec := False;
ICQCLient1.Disconnect;
Memo1.Lines.Add('Соединение с сервером оборвано.');
Timer1.Enabled := False;
end;
end;
========================
Обработка полученных сообщений
========================
Создаем событие OnMessageRecv для ICQClient1.
procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var
icq: cardinal;
begin
icq := StrToInt(UIN);
Memo1.Lines.Add(UIN + ': ' + Msg); //Добавляем полученное сообщение в Memo1
ICQClient1.SendMessage(icq,'Привет'); //Отсылаем ответ
end;
Вот теперь скелет