unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, ComCtrls, ToolWin, StdCtrls, ExtCtrls, XPMan, Menus;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Memo1: TMemo;
StatusBar1: TStatusBar;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
Panel1: TPanel;
Edit1: TEdit;
Panel2: TPanel;
Edit2: TEdit;
Button1: TButton;
Timer1: TTimer;
ListBox1: TListBox;
ControlBar1: TControlBar;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
vremya: TTimer;
XPManifest1: TXPManifest;
Splitter1: TSplitter;
Splitter2: TSplitter;
Splitter3: TSplitter;
Panel3: TPanel;
ComboBox1: TComboBox;
ToolButton3: TToolButton;
CheckBox1: TCheckBox;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
About1: TMenuItem;
SaveDialog1: TSaveDialog;
N9: TMenuItem;
ToolButton4: TToolButton;
texttimer: TTimer;
MemoBufer: TMemo;
procedure ToolButton1Click(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure vremyaTimer(Sender: TObject);
procedure Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ToolButton3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure texttimerTimer(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
t: string;
nick:string;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
If ClientSocket1.Active=False then ClientSocket1.Active:=true;
StatusBar1.Panels.Items[1].Text:='Подключен';
Memo1.Lines.Add('Клиент подключен к серверу '+'['+DateToStr(Date) + ']' +' '+ '[' + TimetoStr(time)+ ']') ;
texttimer.Enabled:=true;
end;
procedure TForm1.ToolButton2Click(Sender: TObject);
begin
ClientSocket1.Active:=False;
StatusBar1.Panels.Items[1].Text:='Отключен';
Memo1.Lines.Add('Клиент откючен от сервера: '+'['+DateToStr(Date) + ']' +' '+ '[' + TimetoStr(time)+ ']') ;
texttimer.Enabled:=true;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
{Если мы хотим послать приватное сообщение, но не выбрали адресата -
нас покарают замечанием :) и выгонят из обработчика}
if (CheckBox1.Checked)and(ListBox1.ItemIndex < 0) then begin
ShowMessage('Вы должы выбрать кому посылать сообщение в юзерлисте!');
Exit;
end;
{Если это приватное сообщение}
if CheckBox1.Checked then
s := '#P'+ListBox1.Items[ListBox1.ItemIndex]+';' {добавляем спец.команду и адресат}
else {А если не очень приватное?}
s := '#M'; {Просто спец.команду}
{Добавляем наше имя (от кого) и само сообщение}
s := s+nick+';'+Edit2.Text;
{Посылаем все это добро по сокету}
ClientSocket1.Socket.SendText(s);
{И снова ждем ввода в уже чистом TEdit-е}
Edit2.Text := '';
ActiveControl := Edit2;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Width:=640;
Form1.Height:=420;
Form1.Position:=poDesktopCenter;
Form1.AutoSize:=true;
Timer1.Enabled:=false;
t:=InputBox('Соеденение..', 'Введите имя клиента:', ' ');
if t='' then t:='Пользователь'+TimeToStr(time);
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var s,from_,to_: string;
begin
s:=Socket.ReceiveText;
if Copy(s,1,2)='#N' then
begin Socket.SendText('#N'+t);
exit;
end;
if copy(s,1,2)='#U' then begin
Delete(s,1,2);
ListBox1.Items.Clear;
while Pos (';',s)>0 do begin
ListBox1.Items.Add(Copy(s,1,Pos(';',s)-1));
Delete (s,1,Pos(';',s));
end;
Exit;
end;
{Если нам прислали общее сообщение (видимое для всех юзеров)}
if Copy(s,1,2) = '#M' then begin
Delete(s,1,2);
{Добавляем его в Memo1}
Memo1.Lines.Insert(0,Copy(s,1,Pos(';',s)-1)+'#N'+'>'+
Copy(s,Pos(';',s)+1,Length(s)-Pos(';',s)));
Exit;
end;
{Если нам прислали запрос на наше имя юзера}
if Copy(s,1,2) = '#N' then begin
{Посылаем ответ}
Socket.SendText('#N'+nick);
Exit;
end;
{Если прислали приватное сообщение }
if Copy(s,1,2) = '#P' then begin
Delete(s,1,2);
{Выделяем в to_ - кому оно предназначено}
to_ := Copy(s,1,Pos(';',s)-1);
Delete(s,1,Pos(';',s));
{Выделяем в from_ - кем отправлено}
from_ := Copy(s,1,Pos(';',s)-1);
Delete(s,1,Pos(';',s));
{Если оно для нас, или написано нами - добавляем в Memo1}
if (to_ = nick)or(from_ = nick) then
Memo1.Lines.Insert(0,from_+' (приватное) > '+s);
Exit;
end;
end;
procedure TForm1.vremyaTimer(Sender: TObject);
begin
label1.Caption:=TimeToStr(Now);
label3.Caption:=DateToStr(Now);
end;
procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
{Если была нажата Enter (для тех, кто с мышами не дружит) - тоже не
отказываемся послать сообщение}
if Key = VK_RETURN then
Button1.Click;
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
{отсоединились :(}
Memo1.Lines.Insert(0,'disconnected');
end;
procedure TForm1.ToolButton3Click(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
If ClientSocket1.Active=False then ClientSocket1.Active:=true;
StatusBar1.Panels.Items[1].Text:='Подключен';
Memo1.Lines.Add('Клиент подключен к серверу '+'['+DateToStr(Date) + ']' +' '+ '[' + TimetoStr(time)+ ']') ;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
ClientSocket1.Active:=False;
StatusBar1.Panels.Items[1].Text:='Отключен';
Memo1.Lines.Add('Клиент откючен от сервера: '+'['+DateToStr(Date) + ']' +' '+ '[' + TimetoStr(time)+ ']') ;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
procedure TForm1.About1Click(Sender: TObject);
begin
Form2.Showmodal;
end;
procedure TForm1.N9Click(Sender: TObject);
begin
memo1.Lines.SaveToFile('log\log.txt');
end;
procedure TForm1.texttimerTimer(Sender: TObject);
begin
Memo1.Lines.Add('['+DateTostr(Date)+']'+' '+'['+TimeToStr(Date)+']');
texttimer.Enabled:=false;
end;
procedure TForm1.ToolButton4Click(Sender: TObject);
begin
if(FileExists('log\log'+'['+DateToStr(Date)+']'+'.txt')) then begin
MemoBufer.Lines.LoadFromFile('log\log'+'['+DateToStr(Date)+']'+'.txt');
MemoBufer.Lines.Add(Memo1.Text);
MemoBufer.Lines.SaveToFile('log\log'+'['+DateToStr(Date)+']'+'.txt');
end;
end;
end.