?? unit1.pas
字號(hào):
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('顯示表情符號(hào)(//<表情符號(hào)>[<空格>附加語(yǔ)句])');
//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)
+'***>>你對(duì)'+nicheng+'說(shuō)'+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('對(duì)不起,表情符號(hào)//'+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)+' ***>>你對(duì)'
+nicheng+'說(shuō)'+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)+')'
+'說(shuō):'+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<>'無(wú)' 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]+'更改昵稱(chēng)為'+
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:='數(shù)據(jù)發(fā)送完畢';
end;
procedure TForm1.NMUDP1InvalidHost(var handled: Boolean);
var
tmpstr:string;
begin
if inputquery('不正確的主機(jī)設(shè)置','請(qǐng)重新指定主機(jī):',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('昵稱(chēng)輸入','請(qǐng)輸入新的昵稱(chēng)','');
if tmpstr<>'' then
edit4.Caption:=tmpstr;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
tmpstr:string;
portn:integer;
begin
tmpstr:=inputbox('端口輸入','請(qǐng)輸入本地工作端口:','');
try
portn:=strtoint(tmpstr);
nmudp1.LocalPort:=portn;
label6.Caption:=tmpstr;
except
showmessage('請(qǐng)輸入數(shù)字');
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.
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -