⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 非常好用的VC++源代码
💻 PAS
字号:
unit Unit1;

interface

uses
  unit2,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ImgList, ToolWin, ComCtrls, ExtCtrls, NMUDP,Inifiles,
  jpeg,buttons,ActnList,fstrrep;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TComboBox;
    Edit4: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    ToolBar1: TToolBar;
    ImageList1: TImageList;
    SendBtn: TToolButton;
    clearBtn: TToolButton;
    kickbtn: TToolButton;
    NMUDP1: TNMUDP;
    StatusBar1: TStatusBar;
    Image1: TImage;
    Image2: TImage;
    ListView1: TListView;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Image3: TImage;
    Label11: TLabel;
    ImageList2: TImageList;
    ToolButton2: TToolButton;
    Label7: TLabel;
    Image4: TImage;
    ComboBox1: TComboBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure Edit3KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit3Select(Sender: TObject);
    procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure SendBtnClick(Sender: TObject);
    procedure clearBtnClick(Sender: TObject);
    procedure kickbtnClick(Sender: TObject);
    procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: String; Port: Integer);
    procedure NMUDP1DataSend(Sender: TObject);
    procedure NMUDP1InvalidHost(var handled: Boolean);
    procedure NMUDP1Status(Sender: TComponent; status: String);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure ComboBox1Select(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
private
    { Private declarations }
    function Emote:Boolean;

  public
    { Public declarations }
    nicheng:string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function TForm1.Emote:Boolean;
var
  mystream:tmemorystream;
  SourceStr:String;
  DestStr:String;
  EmoteS:TStringList;
  ReceverName:String;
  tmpStr,eStr,mStr,moteStr:String;
  tmpi:Integer;
begin
  NMUDP1.ReportLevel:=STATUS_basic;
  NMUDP1.RemoteHost:=EDIT1.Text;
  NMUDP1.RemotePort:=Strtoint(Edit2.Text);
  Result:=false;
  SourceStr:=Edit3.Text+' ';
  DestStr:=Copy(SourceStr,1,2);
  if DestStr='/e' then
  begin
    EmoteS:=TStringList.Create;
    try
     with TInifile.Create('f:\emotes.emt')do
     begin
        ReadSection('emote',EmoteS);
        memo1.Lines.Add(#13);
        memo1.Lines.Add('显示表情符号(//<表情符号>[<空格>附加语句])');
        //memo1.Lines.Append(EmoteS.CommaText);
        memo1.Lines.Add(#13);
       //memo1.Text:=#0;
     end;
    finally
      EmoteS.Free;
   end;
   Result:=True;
  end;
  if DestStr='//' then
  begin
    tmpi:=Pos(' ',SourceStr);
    eStr:=Copy(SourceStr,3,tmpi-3);
    mStr:=Copy(SourceStr,tmpi+1,Length(SourceStr)-tmpi-1);
    ReceverName:=nicheng;{Edit4.caption;}
    with TInifile.Create('f:\emotes.emt')do
    begin
      if ReceverName<>'' then
      begin
        tmpStr:=ReadString('emote_rec',eStr,'');
        moteStr:=FastReplace(tmpStr,'<Receiver>',ReceverName,false);
      end
      else
      begin
        moteStr:=ReadString('emote',eStr,'');
      end;
      if moteStr<>'' then
      begin
        memo1.Font.Color:=clpurple;
        memo1.Lines.Add(datetostr(date)+' '+timetostr(time)
        +'***>>你对'+nicheng+'说'+motestr+mStr);
        tmpstr:=label6.Caption+'^'+edit4.Caption+'^'+moteStr+mStr+'^'
        +inttostr(image1.Tag)+'^';
        Mystream:=TMemoryStream.Create;
        try
        MyStream.Write(tmpstr[1],length(tmpstr));
        NMUDP1.SendStream(Mystream);
        finally
        mystream.Free;
        end;
      end else
      begin
        memo1.Lines.Add('对不起,表情符号//'+eStr+'看不懂!');
        memo1.Clear;
      end;
      Result:=True;
    end;
  end;
end;



function getmaskstring(s,mask:string;position:integer):string;
var
  str:string;
  i,len:integer;
begin
 str:='';
 for i:=0 to position -1 do
 begin
   if(pos(mask,s)<=0) then
   begin
     str:=s;
     break;
   end;
   str:=copy(s,1,pos(mask,s)-1);
   len:=length(str);
   s:=copy(s,len+2,length(s)-len-1);
   end;
   result:=str;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
   NMUDP1.LocalPort:=3244;
   NMUDP1.Remoteport:=3244;
   memo1.Clear;
end;

procedure TForm1.Edit3KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  MyStream:TMemoryStream;
  TmpStr:String;
  exist:bool;
  ii:Integer;
begin
  exist:=false;
  if Key=vk_return then begin
    NMUDP1.ReportLevel:=Status_Basic;
    NMUDP1.RemoteHost:=Edit1.Text;
    NMUDP1.RemotePort:=Strtoint(Edit2.Text);
    for ii:=0 to Edit3.Items.Count-1 do begin
    if edit3.Text=edit3.items[ii] then exist:=true;
    end;
    if exist=false then
    edit3.Items.Add(edit3.Text);
    tmpstr:=label6.Caption+'^'+edit4.Caption+'^'+
    edit3.Text+'^'+inttostr(image1.Tag)+'^';
    Mystream:=TMemoryStream.Create;
    try
      MyStream.Write(Tmpstr[1],length(tmpstr));
      NMUDP1.SendStream(Mystream);
      finally
       mystream.Free;
      end;
   end;
end;


procedure TForm1.Edit3Select(Sender: TObject);
var
  mystream:Tmemorystream;
  tmpstr:string;
  exist:bool;
  ii:integer;
begin
   exist:=false;
   NMUDP1.ReportLevel:=STATUS_basic;
   NMUDP1.RemoteHost:=EDIT1.Text;
   NMUDP1.RemotePort:=Strtoint(Edit2.Text);
    for ii:=0 to Edit3.Items.Count-1 do begin
    if edit3.Text=edit3.items[ii] then exist:=true;
    end;
    if exist=false then
    edit3.Items.Add(edit3.Text);
    tmpstr:=label6.Caption+'^'+edit4.Caption+'^'+
    edit3.Text+'^'+inttostr(image1.Tag)+'^';
    Mystream:=TMemoryStream.Create;
    try
      MyStream.Write(Tmpstr[1],length(tmpstr));
      NMUDP1.SendStream(Mystream);
      finally
       mystream.Free;
      end;
end;

procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
  if listview1.ItemIndex<>-1 then begin

  edit2.Text:=listview1.Items[listview1.itemindex].caption{.subitems[2]};
  edit1.Text:=listview1.Items[listview1.itemindex].SubItems[1];
  nicheng:=listview1.Items[listview1.itemindex].SubItems[0];
  end;
end;

procedure TForm1.SendBtnClick(Sender: TObject);
var
  mystream:Tmemorystream;
  tmpstr:string;
  exist:bool;
  ii:integer;
begin
   exist:=false;
   NMUDP1.ReportLevel:=STATUS_basic;
   NMUDP1.RemoteHost:=EDIT1.Text;
   NMUDP1.RemotePort:=Strtoint(Edit2.Text);
    for ii:=0 to Edit3.Items.Count-1 do begin
    if edit3.Text=edit3.items[ii] then exist:=true;
    end;
    if exist=false then
    edit3.Items.Add(edit3.Text);
    tmpstr:=label6.Caption+'^'+edit4.Caption+'^'+
    edit3.Text+'^'+inttostr(image1.Tag)+'^';
    memo1.Font.Color:=clpurple;
    memo1.Lines.Add(datetostr(date)+' '+timetostr(time)+' ***>>你对'
    +nicheng+'说'+edit3.Text);
    Mystream:=TMemoryStream.Create;
    try
      MyStream.Write(Tmpstr[1],length(tmpstr));
      NMUDP1.SendStream(Mystream);
      finally
       mystream.Free;
      end;

end;

procedure TForm1.clearBtnClick(Sender: TObject);
begin
  memo1.Clear;
end;


procedure TForm1.kickbtnClick(Sender: TObject);
begin
   if listview1.ItemIndex<>-1 then
   begin
    listview1.Items.Delete(listview1.ItemIndex);
   end;
end;




procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
  mystream:tmemorystream;
  tmpstr,command:string;
  ii:integer;
  exist:bool;
  listitem:tlistitem;
  imgsn:integer;
begin
  exist:=false;
  mystream:=tmemorystream.Create;
  try
   nmudp1.ReadStream(mystream);
   setlength(tmpstr,numberbytes);
   mystream.Read(tmpstr[1],numberbytes);
   memo1.Font.Color:=clteal;
   memo1.Lines.Add(datetostr(date)+' '+timetostr(time)+'==>>'+
   getmaskstring(tmpstr,'^',2)+'('+getmaskstring(tmpstr,'^',1)+')'
   +'说:'+getmaskstring(tmpstr,'^',3));
   nicheng:=getmaskstring(tmpstr,'^',2);
   try
   imgsn:=strtoint(getmaskstring(tmpstr,'^',4));
   if imgsn>0 then begin
   image2.Tag:=imgsn;
   image2.Picture.Assign(nil);
   imagelist1.GetBitmap(imgsn,image2.Picture.Bitmap);
   end else image1.Picture.Assign(nil);
   except
   end;
   command:=getmaskstring(tmpstr,'^',5);
   if command<>'无' then
   //shellexecute(handle,nil,pchar(command),nil,nil,SW_SHOWNORMAL);
   for ii:=0 to listview1.Items.Count-1 do begin
   if getmaskstring(tmpstr,'^',1)=listview1.Items[ii].Caption then
   begin
   exist:=true;
   if getmaskstring(tmpstr,'^',2)<>listview1.Items[ii].SubItems[0]
   then begin
   memo1.Lines.add(datetostr(date)+' '+timetostr(time)+' ==>>'+
   listview1.Items[ii].SubItems[0]+'更改昵称为'+
   getmaskstring(tmpstr,'^',2));
   listview1.Items[ii].SubItems[0]:=getmaskstring(tmpstr,'^',2);
     end;
   end;
   end;
   if exist=false then begin
   listitem:=listview1.Items.Add;
   listitem.Caption:=inttostr(port);{getmaskstring(tmpstr,'^',2);}
   listitem.SubItems.Add(getmaskstring(tmpstr,'^',2));
   listitem.SubItems.Add(fromip);
   listitem.SubItems.add(inttostr(port));
   listitem.SubItems.Add('nothing');
   if ii=1 then
   listitem.ImageIndex:=listitem.ImageIndex+ii
  {if ii=2 then
   listitem.ImageIndex:=listitem.ImageIndex+ii-1  }
   else
   listitem.ImageIndex:=listitem.ImageIndex+ii+3;
   end;

   finally
   mystream.Free;
   end;

end;

procedure TForm1.NMUDP1DataSend(Sender: TObject);
begin
  statusbar1.SimpleText:='数据发送完毕';
end;

procedure TForm1.NMUDP1InvalidHost(var handled: Boolean);
var
  tmpstr:string;

begin
  if inputquery('不正确的主机设置','请重新指定主机:',tmpstr) then
  begin
  nmudp1.RemoteHost:=tmpstr;
  handled:=true;
  end;
end;

procedure TForm1.NMUDP1Status(Sender: TComponent; status: String);
begin
  if statusbar1<>nil then
  statusbar1.SimpleText:=status;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  tmpstr:string;
begin
  tmpstr:=inputbox('昵称输入','请输入新的昵称','');
  if tmpstr<>'' then
   edit4.Caption:=tmpstr;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  tmpstr:string;
  portn:integer;
begin
   tmpstr:=inputbox('端口输入','请输入本地工作端口:','');
   try
     portn:=strtoint(tmpstr);
     nmudp1.LocalPort:=portn;
     label6.Caption:=tmpstr;
     except
     showmessage('请输入数字');
     end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if Edit3.Text<>'' then
  begin
    if Emote then
    begin
      exit;
    end;
  end;
end;
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.ToolButton2Click(Sender: TObject);
begin
 if Edit3.Text<>'' then
  begin
    if Emote then
    begin
      exit;
    end;
  end;
end;

procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  edit3.Text:=ComboBox1.Items[ComboBox1.ItemIndex];
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
    close;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
    form2.ShowModal;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -