📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Sockets, Buttons, ExtCtrls, ScktComp;
type
TForm1 = class(TForm)
Image1: TImage;
SpeedButton1: TSpeedButton;
Memo1: TMemo;
Edit1: TEdit;
ComboBox1: TComboBox;
ListBox1: TListBox;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
Label1: TLabel;
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Label2: TLabel;
Label3: TLabel;
SpeedButton6: TSpeedButton;
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure SpeedButton4Click(Sender: TObject);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure SpeedButton6Click(Sender: TObject);
procedure ServerSocket1ClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
NickName:string;//其中NickName用于放聊天人的名称,b_Client用于表明应用程序是否作为客户端进行数据传输
b_Client:boolean;
Form1: TForm1;
OldX,OldY:integer; //定义全局变量
implementation
{$R *.dfm}
procedure TForm1.SpeedButton5Click(Sender: TObject);
var
n:string;
begin
if InputQuery('更改昵称','新昵称..',n) then
if Length(n)>0 then
NickName:=n;
label3.Caption:=n;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
ClientSocket1.close;
ServerSocket1.close;
close;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
OldX:=x;
OldY:=y;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssleft in shift then //按下鼠标左键
begin
Form1.Left:=Form1.Left+x-Oldx;
Form1.Top:=Form1.Top+y-Oldy;
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
edit1.SetFocus;
form1.Left:=trunc((screen.Width-form1.Width)/2);
form1.Top:=trunc((screen.Height-form1.Height)/2);
AnimateWindow(handle,100,aw_hor_negative+aw_activate+aw_center);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
NickName:='我的昵称';
b_Client:=true;
label1.Caption:='小强聊天系统测试版';
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
ClientSocket1.Close;
speedbutton3.Enabled:=false;
speedbutton2.Visible:=false;
speedbutton6.Visible:=true;
ServerSocket1.Open;
label1.Caption:='开始监听...';
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
var s:string;
begin
if ClientSocket1.Active then
ClientSocket1.Close;
if inputquery('连接到计算机','要连接的计算机IP地址:',s) then
if length(s)>0 then
with ClientSocket1 do
begin
host:=s;
open;
end;
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if edit1.Text='' then
begin
label1.Caption:='不能发空消息啊!~~';
end
else
if Key=VK_Return then
begin
Memo1.Lines.Add(NickName+'说:'+Edit1.Text);
if b_Client then
ClientSocket1.Socket.SendText(Memo1.Lines[Memo1.lines.Count-1])
else
ServerSocket1.Socket.Connections[0].SendText(Memo1.Lines[Memo1.lines.Count-1]);
edit1.Text:='';
label1.Caption:='';
end;
end;
procedure TForm1.ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
label1.Caption:='等待连接允许响应...';
end;
procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
b_Client:=false;
clientsocket1.Close;
serversocket1.Open;
label1.Caption:='连接到'+Socket.RemoteAddress;
listbox1.Items.Add(Socket.RemoteAddress);
combobox1.Items.Add(Socket.RemoteAddress);
speedbutton3.Enabled:=false;
NickName:='主机';
label3.Caption:='主机';
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
serversocket1.Close;
clientsocket1.Open;
b_Client:=true;
label1.Caption:='连接成功';
listbox1.Items.Add(Socket.LocalAddress);
speedbutton2.Enabled:=false;
speedbutton3.Enabled:=false;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.lines.Add(Socket.ReceiveText);
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.lines.Add(Socket.ReceiveText);
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
ClientSocket1.close;
listbox1.Clear;
label1.Caption:='断开连接';
speedbutton2.Enabled:=true;
speedbutton3.Enabled:=true;
speedbutton2.Visible:=true;
speedbutton6.Visible:=false;
if b_Client=false then
ServerSocket1.Close;
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
label1.Caption:='断开'+Socket.LocalAddress+'的连接';
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
listbox1.Items.Clear;
ClientSocket1.close;
listbox1.Clear;
label1.Caption:='断开连接';
speedbutton2.Enabled:=true;
speedbutton3.Enabled:=true;
speedbutton2.Visible:=true;
speedbutton6.Visible:=false;
end;
procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
ClientSocket1.Close;
speedbutton3.Enabled:=true;
speedbutton2.Visible:=true;
speedbutton6.Visible:=false;
ServerSocket1.Close;
label1.Caption:='';
end;
procedure TForm1.ServerSocket1ClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.lines.Add(Socket.ReceiveText);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -