|
var
TempStrings:TStrings;
i:integer;
ToStartPos,ToEndPos:integer;
FromWho,ToWho,TempName:string;
begin
try
if ChatServer.Server.ReadReady(RoomID)=1 then
begin
TempStrings:=TStringList.Create;
SetOleStrings(TempStrings,ChatServer.Server.ReadFrom(RoomID));
if FReadStartPos>19 then
if (FClearBufferTag=0-ChatServer.Server.TestClearBufferTag(RoomID)) then
begin
FReadStartPos:=0;
FClearBufferTag:=ChatServer.Server.TestClearBufferTag(RoomID);
end;
for i:=FReadStartPos to TempStrings.Count-1 do
begin
if RightStr(TempStrings[i],11)=''''SecretSpeak'''' then
//可以看到实现悄悄话无非是在说话内容的最后加了一个特殊的标示SecretSpeak
begin
//这一段程序从字符串中解析出说话的对象
ToStartPos:=pos('''' 悄悄的对 '''',TempStrings[i]);
FromWho:=Copy(TempStrings[i],1,ToStartPos-1);//谁说的
ToStartPos:=ToStartPos+10;
ToEndPos:=pos('''' 说:'''',TempStrings[i]);
ToWho:=Copy(TempStrings[i],ToStartPos,ToEndPos-ToStartPos);//说给谁
////////////////////////////////////////////////////////////////////////////////////////////////////
if (ToWho=''''所有人'''') or (ToWho=UserName) or (FromWho=UserName) then
//是自己说的,或自己应该看到的,或是说给所有人的悄悄话都有权看到
begin
Memo1.Lines.Add(Copy(TempStrings[i],1,length(TempStrings[i])-11));
Memo1.Lines.Add('''''''');
end;
end
else //不该看到的内容
begin
Memo1.Lines.Add(TempStrings[i]);
Memo1.Lines.Add('''''''');
end;
end;
FReadStartPos:=TempStrings.Count;
end;
//刷新在线人员列表
Listbox1.Clear;
SetOleStrings(ListBox1.Items,ChatServer.Server.RoomUserList(RoomID));
//刷新说话对象列表
TempName:=SpeakToCBx.Text;
SpeakToCBx.Clear;
SpeakToCBx.Items.Assign(ListBox1.Items);
SpeakToCBx.Items.Insert(0,''''所有人'''');
for i:=0 to SpeakToCBx.Items.Count-1 do
begin
if SpeakToCBx.Items[i]=TempName then Break;
end;
if i>SpeakToCBx.Items.Count-1 then i:=0;
SpeakToCBx.ItemIndex:=i;
//////////////////////////////////////////////////////////////////
except //异常处理
on E:Exception do
begin
Timer1.Enabled:=false;
application.MessageBox
(pchar(''''通信中断或服务器故障,点确定后将关闭程序,请稍后重启动。详细中断原因:''''+E.Message),''''DCOMChatClient'''',MB_ICONWARNING);
application.Terminate;
end;
上一页 [1] [2] [3] 下一页 |