📄 mainfrm.pas
字号:
Sent :=false;
ID:=Session.Param2;
frmIndex:=FindFormByID(ID);
frmChat[frmIndex]:=CreateChatFrm(ID,frmIndex,false);
frmChat[frmIndex].show;
if Session.Param5 ='1' then
begin
DisplayText(frmChat[frmIndex].BText.Lines,'对方文件传输端口被占,稍后再试...','系统消息');
SendMessage(frmChat[frmIndex].BText.Handle,EM_SCROLL,SB_BOTTOM,0);
end
else
begin
DisplayText(frmChat[frmIndex].BText.Lines,'对方拒绝接收文件...','系统消息');
SendMessage(frmChat[frmIndex].BText.Handle,EM_SCROLL,SB_BOTTOM,0);
end;
end;
Ord('N')://文件传输失败
begin
ID:=Session.Param1;
frmIndex:=FindFormByID(ID);
frmChat[frmIndex]:=CreateChatFrm(ID,frmIndex,false);
frmChat[frmIndex].RzBitBtn4.Enabled :=true;
DisplayText(frmChat[frmIndex].BText.Lines,'文件传输失败...','系统消息');
SendMessage(frmChat[frmIndex].BText.Handle,EM_SCROLL,SB_BOTTOM,0);
frmChat[frmIndex].show;
Receive:=false;
end;
Ord('C')://对方已确认要接收文件
begin
ID:=Session.Param2;
frmIndex:=FindFormByID(ID);
if assigned(frmChat[frmIndex]) then
begin
DisplayText(frmChat[frmIndex].BText.Lines,'对方正在接收文件,请不要关闭...','系统消息');
SendMessage(frmChat[frmIndex].BText.Handle,EM_SCROLL,SB_BOTTOM,0);
frmChat[frmIndex].show;
frmChat[frmIndex].SendFile ;
end
else
begin
frmChat[frmIndex]:=CreateChatFrm(Session.Param2,frmIndex,false);
DisplayText(frmChat[frmIndex].BText.Lines,'文件传输失败...','系统消息');
SendMessage(frmChat[frmIndex].BText.Handle,EM_SCROLL,SB_BOTTOM,0);
frmChat[frmIndex].show;
sleep(1);
frmmain.Send('N',frmmain.myHandle,frmmain.myName,frmmain.myID,Session.Param3,'','','');
Sent:=false;
end;
end;
Ord('Q')://是否要接收文件
begin
if Receive or Sent then
frmmain.Send('Y',frmmain.myHandle,frmmain.myName,frmmain.myID,Session.Param3,Session.Param4,'1','');
if (not Receive) and (not Sent) then
begin
if MessageBox(0, Pchar(Session.Param1+'有文件传输给你,要接收吗?'), '提示',
MB_ICONQUESTION or MB_OKCANCEL or MB_DEFBUTTON2)=mrOk then
begin
ID:=Session.Param2;
frmIndex:=FindFormByID(ID);
frmChat[frmIndex]:=CreateChatFrm(ID,frmIndex,false);
frmChat[frmIndex].RzBitBtn4.Enabled :=false;
DisplayText(frmChat[frmIndex].BText.Lines,'正接收文件,请不要关闭...','系统消息');
SendMessage(frmChat[frmIndex].BText.Handle,EM_SCROLL,SB_BOTTOM,0);
frmChat[frmIndex].show;
Receive:=true;
//等窗体创建出来后,再发消息给对方确认
frmmain.Send('O',frmmain.myHandle,frmmain.myName,Session.Handle,frmmain.myID,'','','');
end
else
begin
ID:=Session.Param2;
frmIndex:=FindFormByID(ID);
if UserInfo^[frmIndex].Logined<>'0' then
frmmain.Send('Y',frmmain.myHandle,frmmain.myName,frmmain.myID,Session.Param3,Session.Param4,'0','');
end;
end;
end;
Ord('X')://修改成功
begin
Screen.Cursor:=crDefault;
if Session.Param1 <>'Error' then
information('修改成功!')
else
information('密码错误!')
end;
Ord('B')://取得本人信息
begin
myName:=Session.Param1;
mySex:=strtoint(Session.Param4);
myImgIndex:=strtoint(Session.Param3);
if Assigned(frmConfig) then
begin
frmConfig.edRemark.Text:=Session.Param5;
frmConfig.UserImageList.ItemIndex :=strtoint(Session.Param3);
frmConfig.cbSex.ItemIndex :=strtoint(Session.Param4);
frmConfig.edName.Text:=Session.Param1;
end;
end;
Ord('U'): //取得聊天用户的IP,头象
begin
i:=ChatUsersID.IndexOf(Session.Param4);
if (i>=0) and (i<AllowNumber) then
begin
GPFriend.Items[i].Caption:=Session.Param5;
GPFriend.Items[i].ImageIndex:=3+byte(strtoint(Session.Handle));
end;
StrPCopy(UserInfo^[frmIndex].UserName,Session.Param5);
StrPCopy(UserInfo^[frmIndex].Sex,Session.Handle);
frmchat[frmIndex].UserName :=UserInfo^[frmIndex].UserName;
frmchat[frmIndex].Sex :=strtoint(UserInfo^[frmIndex].Sex);
frmchat[frmIndex].Caption :=UserInfo^[frmIndex].UserName+'-对话';
frmchat[frmIndex].LbHost.Update ;
frmchat[frmIndex].LbHost.Caption :='主机名:'+Session.Param1 ;
frmchat[frmIndex].LbAddress.Update ;
frmchat[frmIndex].LbAddress.Caption :='IP地址:'+Session.Param2 ;
frmchat[frmIndex].Address :=Session.Param2;
frmchat[frmIndex].lbUser.Update ;
frmchat[frmIndex].lbUser.Caption:='昵称:'+Session.Param5;
frmchat[frmIndex].btImage.Update ;
frmchat[frmIndex].btImage.Images :=ImageList3;
frmchat[frmIndex].btImage.ImageIndex :=strtoint(Session.Param3);
frmchat[frmIndex].btImage.DisabledIndex :=strtoint(Session.Param3);
frmchat[frmIndex].ImageIndex :=frmchat[frmIndex].btImage.ImageIndex;
frmchat[frmIndex].Remark :=Session.Param6 ;
if not frmchat[frmIndex].RzBitBtn5.Enabled then
begin
frmChat[frmIndex].CreateRussfrm;//如果用户要进行游戏 则要在获得对方信息之后再创建
end;
end;
Ord('T'),Ord('A')://客户交流
begin
try
if Session.Param4='1' then//判断该用户是否还在线
begin
ID:=Session.Param3;
frmIndex:=FindFormByID(ID);
if not assigned(frmChat[frmIndex]) then
begin
Tray1.Animate :=true;
Timer1.Enabled :=true;
if FIFOIndex.IndexOf(inttostr(frmIndex))<0 then
FIFOIndex.Add(inttostr(frmIndex));
frmChat[frmIndex]:=CreateChatFrm(ID,frmIndex,false);
end
else
begin
flashwindow(frmChat[frmIndex].handle,true);
end;
DisplayText(frmChat[frmIndex].BText.Lines,Session.Param1);
SendMessage(frmChat[frmIndex].BText.Handle,EM_SCROLL,SB_BOTTOM,0);
if not frmChat[frmIndex].RzBitBtn4.Enabled then
frmChat[frmIndex].RzBitBtn4.Enabled:=true;
if InitData.AutoSave then
begin
HisText:=read(InitData.Path+'\f'+Session.Param3+'.dat');
HisText:=trim(HisText+#13+Session.Param1);
SendMessage(frmChat[frmIndex].BText.Handle,EM_SCROLL,SB_BOTTOM,0);
write(InitData.Path+'\f'+Session.Param3+'.dat',HisText);
end;
if InitData.PlayWave then
sndplaysound(pStrSound,snd_async or snd_Memory);
end
else
begin
ID:=Session.Param5;
frmIndex:=FindFormByID(ID);
if assigned(frmChat[frmIndex]) then
begin
DisplayText(frmChat[frmIndex].BText.Lines,frmChat[frmIndex].UserName+'已下线...','系统消息');
SendMessage(frmChat[frmIndex].BText.Handle,EM_SCROLL,SB_BOTTOM,0);
end;
end;
except
Send('D',myHandle,'','','','','','');
raise;
end;
end;
Ord('F')://用户登录失败
begin
information(Session.Param1);
Screen.Cursor :=crDefault;
end;
Ord('L')://用户登录成功,取得用户列表
begin
Logined:=True;
myName:=copy(Session.Param5,1,length(Session.Param5)-1);
mySex:=strtoint(Session.Param5[length(Session.Param5)]);
myHandle:=Session.Handle;
Tray1.Hint :='JJYY-'+myName;
RegIni1.WriteString('UserID',myID,myName);
if frmLogin<>nil then
myID:=frmLogin.cbUserID.Text;
FunHandle:=LoadLibrary('General.dll');
if FunHandle<>0 then
begin
@UserInfoList:=GetProcAddress(FunHandle,'GetUserInfo');
if @UserInfoList<>nil then
begin
new(UserInfo);
UserInfo:=UserInfoList(RecText^[2],RecText^[3],RecText^[4],RecText^[5],RecText^[7]);
if RecText^[7]<>'?' then
begin
for i:=0 to high(UserInfo^) do
begin
ChatUsersID.Add(UserInfo^[i].ID);
if i<AllowNumber then
begin
GPFriend.Update;
x:=GPFriend.Items.Add;
with UserInfo^[i] do
UpdateUserState(x,UserName,Sex,(Logined='1'));
end
else
begin
if i<AllowNumber+1 then
begin
x:=GPFriend.Items.Add;
x.ImageIndex :=-1;
x.DisabledIndex :=-1;
x.Caption:='更多...';
x.OnClick :=MoreClick;
end;
y:=TCoolItem95.Create(self);
UserMenu.Height :=UserMenu.Height +y.Height ;
with UserInfo^[i] do
UpdateUserMenu(y,UserName,Sex,(Logined='1'));
UserMenu.AddItem(y);
end;
end;
setLength(frmChat,high(UserInfo^)+1);
end;
FreeLibrary(FunHandle);
end;
end;
if FrmLogin<>nil then
begin
FrmLogin.Close ;
FrmLogin:=nil;
end;
RefreshStates;
Send('B','',frmmain.myID,'','','','','');//取得自己全部信息
end;
Ord('E')://用户注册失败
begin
information('注册失败!');
RefreshStates;
end;
Ord('S')://用户注册成功
begin
Logined:=True;
myID:=Session.Param1 ;
RegIni1.WriteString('UserID',myID,myName);
RefreshStates;
information('注册成功,你的ID是'+myID+'!');
end;
Ord('G'): //其他用户上下线时刷新用户列表
begin
if Logined then
begin
if Session.Param4<>'2' then//2表示用户为adminstrator添加的,状态为下线
begin
if (Session.Param3='1') and (InitData.ShowOnHint) then
Tray1.ShowBalloonHint('信息',Session.Param1+'已登录!')
else if (Session.Param3='0') and (InitData.ShowOffHint) then
Tray1.ShowBalloonHint('信息',Session.Param1+'已下线!');
end;
if UserInfo^<>nil then
begin
for i:=0 to high(UserInfo^) do
if strpas(UserInfo^[i].ID)=Session.Param5 then
begin
StrPCopy(UserInfo^[i].Logined,Session.Param3);
StrPCopy(UserInfo^[i].Sex,Session.Param2);
StrPCopy(Userinfo^[i].Handle,Session.Handle);
StrPCopy(Userinfo^[i].ID,Session.Param5);
StrPCopy(UserInfo^[i].UserName,Session.Param1);
break;
end;
if Session.Param4='0' then
for i:=0 to high(UserInfo^) do
if ChatUsersID.Strings[i]=Session.Param5 then
begin
if Session.Param3='1' then
begin
ChatUsersID.Delete(i);//减
if i<AllowNumber then
begin
GPFriend.Update;
GPFriend.Items.Delete(i);
ChatUsersID.Insert(0,Session.Param5);//加
x:=TRZGroupItem(GPFriend.Items.Insert(0));
with Session do
UpdateUserState(x,Param1,Param2,(Param3='1'));
end
else
begin
GPFriend.Update;
x:=TRZGroupItem(GPFriend.Items.Insert(0));
with Session do
UpdateUserState(x,Param1,Param2,(Param3='1'));
UserMenu.RemoveItem(i-AllowNumber);
ChatUsersID.Insert(0,Session.Param5);//加
y:=TCoolItem95.Create(self);
with GPFriend.Items[GPFriend.Items.Count-2] do
UpDateUserMenu(y,Caption,inttostr(ImageIndex-3),Enabled);
UserMenu.InsertItem(0,y);
GPFriend.Update;
GPFriend.Items.Delete(GPFriend.Items.Count-2);
end;
end
else
begin
ChatUsersID.Add(Session.Param5);//加
if i<AllowNumber then
begin
if UserMenu.ControlCount>0 then
begin
y:=TCoolItem95.Create(self);
with Session do
UpDateUserMenu(y,Param1,Param2,(Param3='1'));
UserMenu.AddItem(y);
ChatUsersID.Delete(i);//减
GPFriend.Update;
GPFriend.Items.Delete(i);
x:=TRZGroupItem(GPFriend.Items.Insert(GPFriend.Items.Count-1));
x.caption:=TCoolItem95(UserMenu.Controls[0]).caption;
x.Enabled:=TCoolItem95(UserMenu.Controls[0]).Enabled;
if x.Enabled then
begin
x.ImageIndex:=TCoolItem95(UserMenu.Controls[0]).ImageIndex;
x.DisabledIndex:=TCoolItem95(UserMenu.Controls[0]).ImageIndex+9;
end
else
begin
x.ImageIndex:=TCoolItem95(UserMenu.Controls[0]).ImageIndex-9;
x.DisabledIndex:=TCoolItem95(UserMenu.Controls[0]).ImageIndex;
end;
UserMenu.RemoveItem(0);
end
else
begin
ChatUsersID.Delete(i);//减
GPFriend.Update;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -