|
Как узнать 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 и взять готовый вариант там. |