Наверняка всякому обладателю домашней странички хотелось бы иметь свой чат. Есть три способа его заполучить. Первый: можно просто взять готовый чат с какого-нибудь сайта типа http://chatland.ru. Нам это не подходит, потому что в таких чатах фактически нельзя ничего добавить или удалить, да и небезглючны они. Второй вариант: сделать чат самому, полагаясь на знания PHP. Есть еще и третий: создать чат в Delphi, а потом импортировать его в web-страницу с помощью ActiveX. Этим мы сегодня и займемся, использовав максимально простое строение чата, не требующее глубоких знаний программирования.
Компоненты, становись!
Итак, начнем. Для начала запускаем Delphi. Сразу же закрываем автоматически созданный новый проект и в главном меню выбираем File > New > Other. В открывшемся окошке под закладкой ActiveX находим Active Form и щелкаем ОК. Появится окошко Active Form Wizard. В нем изменяем нужные нам параметры, а именно: вместо ActiveFormX в поле New ActiveX Name ставим название нашего проекта Chat, внизу ставим галочку напротив Include Version Information (тем самым мы включаем в наш чат информацию о его версии). Щелкаем ОК. Может появится окно, предупреждающее нас, что мы не можем добавить наш ActiveX в запущенный проект, потому что он пока не является библиотекой ActiveX. Нажимаем OK, чтобы создать новый проект библиотеки ActiveX. Дальше нас спросят, сохранить ли изменения в проекте Project1 кликаем No. После всех этих нехитрых манипуляций откроется форма, похожая на стандартную. Здесь мы и будем создавать наш чат. У себя я сделал так: ListBox1 и Panel3 поместил на большой панели Panel2, align у Panel1 сделал alBottom, после чего у Panel2 это же свойство поменял на alClient. Свойство Visible у Panel1 и Panel2 нужно сделать равным false. Самое главное Panel4 не должна находится на Panel2 она будет появляться в самом начале и просить пользователя ввести его ник и частоту обновления чата. Теперь еще немного о конфигурации свойств: Caption у Button1 Сказать, у Button3 Выход, у BitBtn1 OK, у BitBtn2 Войти.
Немного принципиальности
Перед тем как непосредственно начать программировать, поговорим о принципе работы чата. На сервере в той же директории, где будет храниться чат, должны лежать три обычных пустых текстовых файла с именами chat.txt, users.txt, allusers.txt (названия можно придумать и свои, но дальнейшие пояснения я буду давать исходя из этих). Для чего нужен каждый из этих файлов? В файле chat.txt хранится весь разговор из чата. В users.txt записывается информация обо всех пользователях, находящихся на данный момент в «болталке». Файл же allusers.txt служит для хранения информации о том, кто в какой день и в котором часу заходил в чат (при желании можно обойтись из без этого). Теперь о самой программе. При запуске чат просит пользователя ввести ник и частоту обновления разговора. После того как вы нажимаете кнопку Войти, программа в ListBox2 открывает файл users.txt, добавляет туда строчку, содержащую ваш ник, затем сохраняет всю информацию из ListBox2 обратно в users.txt. При входе ListBox1 загружает информацию из chat.txt. После этого Timer1 выполняет обновление ListBox1 из chat.txt и ListBox2 из users.txt. Обновление это выполняется каждые S секунд, где S время, указанное пользователем в edit4 или измененное в edit2. При нажатии на кнопку Войти, перед загрузкой users.txt в ListBox2, в него грузится allusers.txt. В этот файл добавляется, и сохраняется строчка формата name заходил в чат date в time, где name ник пользователя, взятый из edit3, а date и time дата и время входа соответственно. Теперь о самом общении. Как только пользователю станет скучно сидеть сложа руки и захочется что-то сказать, он вводит какую-то информацию в edit1. При нажатии на кнопку Сказать в Listbox1 добавляются и сохраняются 4 строчки, имеющие такой формат:
В данном случае time время, когда пользователь сказал эту фразу, name ник пользователя, text сама реплика. При выходе запись никнейма из listbox2 удаляется. С принципами работы на этом закончим. Теперь можно со спокойной душой приступить к программированию.
Делаем чат
Начнем с самого начала с обработки события при нажатии на BitBtn2:
Стандартные действия при входе сделаны. Что будет, если человек нажмет на bitbtn1? Пока что ничего, но сейчас мы добавим событие для клика на эту кнопку:
Здесь мы просто заставили таймер сменить свойство interval на величину, записанную пользователем в edit2 и умноженную на 1000 (тем самым мы миллисекунды переводим в секунды). Следующее событие событие для таймера. Вот что оно из себя представляет:
Попросту загружаем файлы чата и пользователей. Как чатланину что-то сказать? Очень просто:
Я снова использую процедуру Insert вместо Add затем, чтобы более новые сообщения отображались сверху. Осталось описать всего два события. Для button3:
Для onclose:
Ники и пароли зарегистрированных пользователей можно хранить в еще одном файле registr.txt, например. Хранится информация в таком виде:
Соответственно, login ник пользователя (edit3), password его пароль (можно добавить еще один edit при входе, например edit4).
Правильность пароля проверяется процедурой indexof(‘name’ ) в listbox, где name введенный логин в edit3. Пароль можно назвать правильным, если edit4.text=listbox.Items.Strings[(listbox.Items.IndexOf(edit3.text)+1)], где listbox listbox, в который мы загрузили registr.txt. Разработку регистрации пользователя оставляю для вас.
Вот, в принципе, и все. Осталось только опубликовать наше творение в Сети.
Внедряемся в WEB
Пришло время заняться импортированием нашего чата в HTML. Сохраняем наш проект в какую-нибудь папку, в ней создаем пустые файлы chat.txt, users.txt, allusers.txt. В главном меню Delphi выбираем Project > Build name, где name имя вашего проекта. Затем выбираем Run > Register ActiveX Server. После этого идем в Project > Web Deployment Options. Выставляем там требуемые значения:
TargetDir полное название директории, где будет хранится cab-файл (директория на сервере, например /chat);
TargetURL url директории, где будет хранится cab-файл, например http://www.petya.com/chat/);
HTML dir совпадает с TargetDir.
Устанавливаем галочку напротив Use CAB file compression (файлы формата .cab весят гораздо меньше, чем их коллеги .ocx). Теперь выбираем Project > Web Deploy. В директории dir/chat, где dir каталог, в который вы сохранили проект. Появятся два файла с расширениями .html и .cab. Чтобы это все работало, необходимо скопировать на сервер в папку chat-файлы с расширением .cab, с расширением .html и три (четыре) файла с расширением .txt.