Как узнать IP ламера в чате Отвечаем на самый-самый Ча.Во.

Шутов (shutov@xakep.ru)

Xakep, номер #050, стр. 050-052-2


ListBox = lbAddConnect

MainMenu = MMenu

PopupMenu = ClickMenu

StatusBar = Status

IdHTTPServer = Server

Теперь небольшие изменения для создания удобного интерфейса:

1) В Align у lbAddConnect стоит установить alClient;

2) В MMenu создается менюшка, можно обозвать ее 'Мониторинг'. В нее надо добавить три ниспадающие Item с Caption'ами:

- 'Старт' (имя mStart);

- 'Стоп' (имя mStop и отрубить в Disabled);

- 'Выход' (mExit, также прописать код - строчку: Close;).

3) В ClickMenu создается две Item: одна с названием cmCopy и Caption'ом 'Копировать', а вторая с cmClearAll и 'Очистить все';

4) В lbAddConnect в настройке PopupMenu необходимо выбрать ClickMenu (таким образом произошла привязка ClickMenu к lbAddConnect);

5) У Status в Panels добавить новую (Add New);

6) В Uses добавить ClipBrd - это понадобится в дальнейшем для копирования в буфер обмена строк.

С формами все, можно приступать к написанию самого кода. Далее щелчок мыши по Старту в главном Меню (MMenu) и дальнейшее прописывание кода:

procedure TForm1.mStartClick(Sender: TObject);

begin

Server.Active:=True; //запускаем "сервер"

lbAddConnect.Items.Add('Сервер активирован:

'+FormatDateTime('hh.nn.ss',now));

Status.Panels[0].Text:='Монитор работает'; //вывод инфы пользователю, что сервер работает

mStart.Enabled:=False;

mStop.Enabled:=True;

end;

Теперь в MMenu надо выбирать 'Стоп' и прописать:

procedure TForm1.mStopClick(Sender: TObject);

begin

Server.Active:=False; //вырубаем "сервер"

lbAddConnect.Items.Add('Сервер остановлен:

'+FormatDateTime('hh.nn.ss',now));

Status.Panels[0].Text:='Монитор не работает';

mStart.Enabled:=True;

mStop.Enabled:=False;

end;

А сейчас самое интересное. В Events server'a выбирается событие OnConnect и пишется к нему такой код:

procedure TForm1.ServerConnect(AThread: TIdPeerThread);

begin

lbAddConnect.Items.Add('Внимание, обнаружен коннект:');

lbAddConnect.Items.Add(AThread.Connection.Binding.PeerIP); // определение IP подсоединившегося

end;

Теперь написание обработчика события для Items в ClickMenu:

1) Для cmCopy ('Копировать'):

procedure TForm1.cmCopyClick(Sender: TObject);

var Bo: TClipboard;

begin

{Копируем в буфер обмена}

Bo:=TClipboard.Create; //создается объект клипборда

Bo.SetTextBuf(pchar(lbAddConnect.Items.Strings[lbAddConnect.ItemIndex])); //копируется

Bo.Free; //уничтожается созданный ранее объект

end;

2) Для cmClearAll ('Очистить все'):

procedure TForm1.cmClearAllClick(Sender: TObject);

begin

lbAddConnect.Items.Clear;

end;

Вот и все с написанием. Осталось только это скомпилировать. Ну, а для особых лентяев могу предложить зайти на www.xakep.ru и взять готовый вариант там.

Назад на стр. 050-052-1  Содержание  Вперед на стр. 050-052-3