【文件属性】:
文件名称:DELPHI网络聊天
文件大小:229KB
文件格式:ZIP
更新时间:2016-11-30 05:08:32
网络聊天
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, NMUDP, Buttons, Menus, ComCtrls,WinSock;
type
TForm1 = class(TForm)
Panel1: TPanel;
Edit1: TEdit;
Label1: TLabel;
NMUDP1: TNMUDP;
BitBtn1: TBitBtn;
Panel2: TPanel;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
Button2: TButton;
GroupBox1: TGroupBox;
ListBox1: TListBox;
GroupBox2: TGroupBox;
Memo1: TMemo;
procedure BitBtn1Click(Sender: TObject);
procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;FromIP: String; Port: Integer);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ComputerName: array[0..127] of Char;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
var
MyStream: TMemoryStream;
TmpStr: String;
i:integer;
Begin
if Edit1.Text<>'' then //如果所说的内容不为空,则发送。
begin
NMUDP1.ReportLevel := Status_Basic;
NMUDP1.RemotePort :=8888;//端口为:8888,可以自己定义,但必须与LocalPort相一致。
if ListBox1.Items[ListBox1.ItemIndex]=ComputerName then
Edit1.Text:=ComputerName+'自言自语道:'+Edit1.Text //如果和自己对话.
Else
Edit1.Text:=ComputerName+'对'+ListBox1.Items[listbox1.itemindex]+'说:'+Edit1.Text;
TmpStr :=Edit1.text;
MyStream := TMemoryStream.Create;
try
MyStream.Write(TmpStr[1], Length(Edit1.Text));
if ListBox1.ItemIndex=0 then
begin
for i:=1 to ListBox1.Items.Count-1 do //如果选择"大家",则对所有的网友发送信息
begin
NMUDP1.RemoteHost :=ListBox1.Items[i];//远程主机的名称或地址.
NMUDP1.SendStream(MyStream);//发送信息.
End;
end
else
begin
NMUDP1.RemoteHost :=ListBox1.Items[ListBox1.itemindex]; //仅对所选中的网友.
NMUDP1.SendStream(MyStream);
End;
finally
MyStream.Free;
end;
Edit1.Text:='';
Edit1.SetFocus;
end else
Edit1.SetFocus;
end;
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream: TMemoryStream;
TmpStr: String;
begin
MyStream := TMemoryStream.Create;
try
NMUDP1.ReadStream(MyStream);
SetLength(TmpStr,NumberBytes);
MyStream.Read(TmpStr[1],NumberBytes);
Memo1.Lines.Add(TmpStr); //显示对话的内容.
finally
MyStream.Free;
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
MyStream: TMemoryStream;
TmpStr: String;
i:integer;
Begin
if (key=#13) and (Edit1.Text<>'') then //如果所说的内容不为空,且最后一个按键为"Enter",则发送。
begin
NMUDP1.ReportLevel := Status_Basic;
NMUDP1.RemotePort :=8888;
if ListBox1.Items[ListBox1.ItemIndex]=ComputerName then
Edit1.Text:=ComputerName+'自言自语道:'+Edit1.Text
else
Edit1.Text:=ComputerName+'对'+ListBox1.Items[listbox1.itemindex]+'说:'+Edit1.Text;
TmpStr :=Edit1.text;
MyStream := TMemoryStream.Create;
Memo1.Lines.Add(TmpStr); //显示对话的内容.
try
MyStream.Write(TmpStr[1], Length(Edit1.Text));
if ListBox1.ItemIndex=0 then
begin
for i:=1 to ListBox1.Items.Count-1 do
begin
NMUDP1.RemoteHost :=ListBox1.Items[i];
NMUDP1.SendStream(MyStream);
end;
end
else
begin
NMUDP1.RemoteHost :=ListBox1.Items[ListBox1.itemindex];
NMUDP1.SendStream(MyStream);
end;
finally
MyStream.Free;
end;
Edit1.Text:='';
edit1.SetFocus;
end else
Edit1.SetFocus;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
InputString:String;
begin //增加网友,输入的可以是IP地址或计算机名称。
InputString:=InputBox('增加人员', 'IP地址或计算机名', '');
if Inputstring<>'' then ListBox1.Items.Add(Inputstring);
ListBox1.ItemIndex:=0;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin //删除当前选中的网友,但"大家"不能被删除.
if ListBox1.ItemIndex<>0 then ListBox1.Items.Delete(ListBox1.ItemIndex);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
sz: dword;
begin
memo1.Text:=' ';
sz := SizeOf(Computername);
GetComputerName(ComputerName, sz);//得到本机的标识
ListBox1.Items.Clear;
ListBox1.Items.Add('大家');//在网友清单中,增加"大家"和
ListBox1.Items.Add(ComputerName);//本机名称
ListBox1.ItemIndex:=0;
end;
end.
【文件预览】:
网络聊天
----Unit1.ddp(51B)
----Project1.res(876B)
----Unit1.dcu(9KB)
----Unit1.~ddp(51B)
----Unit1.dfm(3KB)
----Project1.cfg(386B)
----Project1.dpr(188B)
----Unit1.~dfm(3KB)
----Project1.exe(422KB)
----Project1.dof(2KB)
----Unit1.~pas(4KB)
----Unit1.pas(4KB)