CltMain.pas
上传用户:zhanghw123
上传日期:2021-11-15
资源大小:312k
文件大小:3k
源码类别:

P2P编程

开发平台:

Delphi

  1. Unit CltMain;
  2. Interface
  3. Uses
  4.   Windows, SysUtils, Messages, Classes, Controls, Forms,
  5.   Buttons, ComCtrls, ExtCtrls, StdCtrls, Graphics, Dialogs, ToolWin,
  6.   P2pClient, P2pCommon, P2pConst, ImgList;
  7. Type
  8.   TFrmMain = Class(TForm)
  9.     UserList: TListView;
  10.     spl1: TSplitter;
  11.     pnl1: TPanel;
  12.     pnl2: TPanel;
  13.     spl2: TSplitter;
  14.     pnl3: TPanel;
  15.     TxtSendMsg: TRichEdit;
  16.     CmdSend: TSpeedButton;
  17.     Timer: TTimer;
  18.     FD: TFontDialog;
  19.     ImageList: TImageList;
  20.     Pnl4: TPanel;
  21.     ToolBar: TToolBar;
  22.     CmdFont: TToolButton;
  23.     Pnl5: TPanel;
  24.     TxtLog: TRichEdit;
  25.     Splitter1: TSplitter;
  26.     TxtMsg: TRichEdit;
  27.     Procedure FormCreate(Sender: TObject);
  28.     Procedure FormDestroy(Sender: TObject);
  29.     Procedure UserListClick(Sender: TObject);
  30.     Procedure TimerTimer(Sender: TObject);
  31.     Procedure FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
  32.     Procedure CmdSendClick(Sender: TObject);
  33.     Procedure TxtSendMsgKeyDown(Sender: TObject; Var Key: Word;
  34.       Shift: TShiftState);
  35.     Procedure CmdFontClick(Sender: TObject);
  36.   Private
  37.     P2p: TP2pClient;
  38.     CurSelUser: TP2pUser;
  39.   Public
  40.     { Public declarations }
  41.   End;
  42. Var
  43.   FrmMain: TFrmMain;
  44. Implementation
  45. {$R *.dfm}
  46. Procedure TFrmMain.FormCreate(Sender: TObject);
  47. Begin
  48.   P2p := TP2pClient.Create(TxtLog);
  49.   P2p.Socket.RemoteHost := '127.0.0.1';
  50.   P2p.Socket.RemotePort := 9890;
  51.   P2p.Socket.LocalPort := 9089;
  52.   P2p.LoginServer('测试用户');
  53.   CurSelUser := Nil;
  54. End;
  55. Procedure TFrmMain.FormDestroy(Sender: TObject);
  56. Begin
  57.   P2p.Free;
  58. End;
  59. Procedure TFrmMain.UserListClick(Sender: TObject);
  60. Begin
  61.   If UserList.Selected = Nil Then
  62.     CurSelUser := Nil Else
  63.     CurSelUser := TP2pUser(UserList.Selected.Data);
  64. End;
  65. Procedure TFrmMain.TimerTimer(Sender: TObject);
  66. Begin
  67.   P2p.Living;
  68. End;
  69. Procedure TFrmMain.FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
  70. Begin
  71.   P2p.LoginOutServer;
  72. End;
  73. Procedure TFrmMain.CmdSendClick(Sender: TObject);
  74. Begin
  75.   If (TxtSendMsg.Text <> '') And (CurSelUser <> Nil) Then
  76.   Begin
  77.     If Length(TxtSendMsg.Text) > 1024 Then
  78.     Begin
  79.       MessageBox(Handle, '输入的内容太长了。', '错误', MB_ICONHAND);
  80.       TxtSendMsg.SetFocus;
  81.       Exit;
  82.     End;
  83.     P2p.SendChat(CurSelUser, TxtSendMsg);
  84.     TxtMsg.SelAttributes.Color := clGreen;
  85.     TxtMsg.Lines.Add(Format('[%s]你对[%s]说:', [FormatDateTime('YYYY-MM-DD HH:NN:SS', Now), CurSelUser.Address]));
  86.     TxtMsg.SelAttributes := TxtSendMsg.SelAttributes;
  87.     TxtMsg.Lines.Add(Format('%s' + #13#10, [TxtSendMsg.Text]));
  88.     SendMessage(TxtMsg.Handle, EM_SCROLLCARET, 0, 0);
  89.     TxtSendMsg.Clear;
  90.   End Else MessageBox(Handle, '请选择一个聊天用户。', '错误', MB_ICONHAND);
  91. End;
  92. Procedure TFrmMain.TxtSendMsgKeyDown(Sender: TObject; Var Key: Word;
  93.   Shift: TShiftState);
  94. Begin
  95.   If (ssCtrl In Shift) And (Key = VK_RETURN) Then
  96.   Begin
  97.     CmdSend.Click;
  98.     Key := 0;
  99.   End;
  100. End;
  101. Procedure TFrmMain.CmdFontClick(Sender: TObject);
  102. Begin
  103.   If Not FD.Execute Then Exit;
  104.   SetRichEditFont(TxtSendMsg, FD.Font);
  105.   TxtSendMsg.SetFocus;
  106. End;
  107. End.