点击clear offlineinstaller items后邮件可以找回来吗

& View Code
realmessengerimpl.~pas
realmessengerimpl.~pas:Code Content
unit&RealMessengerI
{$WARN&SYMBOL_PLATFORM&OFF}
&&Windows,&ShellAPI,&SysUtils,&StrUtils,&Classes,&Graphics,&Controls,&Forms,Dialogs,
&&ActiveX,&AxCtrls,&StdVcl,&ExtCtrls,&StdCtrls,Contnrs,
&&ComCtrls,&ToolWin,&ImgList,UrlMon,MSHtml,MMSystem,&Menus,&Registry,
&&Global,&CoolTrayIcon,&AppEvnts,Messages,MMPCMSup,
&&WinSock,vfw,Color,ShlObj,WNDES,SyncObjs,ChatingFrm,
&&RealMessengerUnit,&MyInputBoxFrm,SelFaceFrm,MsgFrm,HistoryFrm,
&&SystemSetFrm,&Tabs,DSUtil,DirectShow9,VideoConsts,
&&IdBaseComponent,&IdComponent,&IdTCPConnection,&IdTCPClient,
&&IdMessageClient,&IdPOP3,&Pop3ServerFrm,&MMObj,&MMDevice,MD5,
&&MMMixer,MySocket,&IdUDPBase,&IdUDPClient,
&&IdIOHandler,&IdIOHandlerSocket,&IdSocks,&Gauges,&IdAntiFreezeBase,
&&IdAntiFreeze,&IdHTTP,&bsSkinMenus,&bsSkinData,&BusinessSkinForm,&Inifiles,
&&bsSkinCtrls,&OleCtrls,&SHDocVw,&Mask,&bsSkinBoxCtrls,&bsSkinTabs&,&RxGIF;
&&TViewStyle&=&(vsTree,vsOnlineOffline,vsGroup);
&&TRealMessengerX&=&class(TForm)
&&&&ImgToolbarLeft:&TI
&&&&ImgTitle:&TI
&&&&ImgDraw:&TI
&&&&ImgTitleLeft:&TI
&&&&ImgTitleRight:&TI
&&&&ImgToolbarRight:&TI
&&&&ImgToolbar:&TI
&&&&ImgBorderLeft:&TI
&&&&ImgBottomLeft:&TI
&&&&ImgBottom:&TI
&&&&ImgBottomRight:&TI
&&&&ImgBorderRight:&TI
&&&&ImgClosed:&TI
&&&&ImgMin:&TI
&&&&bsSkinPanel1:&TbsSkinP
&&&&PnlRoot:&TP
&&&&Image1:&TI
&&&&bsSkinPageControl1:&TbsSkinPageC
&&&&bsSkinTabSheet1:&TbsSkinTabS
&&&&PnlWorkSpace:&TP
&&&&PBLogin:&TP
&&&&Gauge:&TG
&&&&LblLoging:&TL
&&&&LblCancelLogin:&TL
&&&&bsSkinScrollBar1:&TbsSkinScrollB
&&&&bsSkinScrollBar2:&TbsSkinScrollB
&&&&TrevUserList:&TbsSkinTreeV
&&&&bsSkinPanel3:&TbsSkinP
&&&&edturl:&TbsSkinE
&&&&bsSkinPanel4:&TbsSkinP
&&&&bsSkinButton2:&TbsSkinB
&&&&bsSkinTabSheet2:&TbsSkinTabS
&&&&bsSkinPanel2:&TbsSkinP
&&&&WBSMS:&TWebB
&&&&bsSkinTabSheet3:&TbsSkinTabS
&&&&WBHY:&TWebB
&&&&HartTimer:&TT
&&&&CoolTrayIcon:&TCoolTrayI
&&&&ImgLstTrayIcon:&TImageL
&&&&ImgLstMsgAlert:&TImageL
&&&&STimer:&TT
&&&&TimerAutoConnect:&TT
&&&&TimerTopBar:&TT
&&&&ClientPOP3:&TIdPOP3;
&&&&Device:&TMMMixerD
&&&&TimeCheckTransmitFileError:&TT
&&&&ClientTCP:&TIdTCPC
&&&&IdIOHandlerSocket1:&TIdIOHandlerS
&&&&IdSocksInfo1:&TIdSocksI
&&&&MsgTimer:&TT
&&&&KeepP2PSessionTimer:&TT
&&&&ApplicationEvents1:&TApplicationE
&&&&TimerLoging:&TT
&&&&TimeCheckAVError:&TT
&&&&IdAntiFreeze1:&TIdAntiF
&&&&bsBusinessSkinForm1:&TbsBusinessSkinF
&&&&bsSkinData1:&TbsSkinD
&&&&Skin1:&TbsCompressedStoredS
&&&&Timer1:&TT
&&&&PopHelp:&TbsSkinPopupM
&&&&N14:&TMenuI
&&&&N16:&TMenuI
&&&&Timer2:&TT
&&&&IdHTTP1:&TIdHTTP;
&&&&ImglstTreeIcons:&TImageL
&&&&IMlTab:&TImageL
&&&&ImlbarSmall:&TImageL
&&&&ImlTray:&TImageL
&&&&ImlBarBig:&TImageL
&&&&bsSkinPanel7:&TbsSkinP
&&&&bsSkinMenuSpeedButton1:&TbsSkinMenuSpeedB
&&&&bsSkinMenuSpeedButton2:&TbsSkinMenuSpeedB
&&&&LblMyState:&TL
&&&&ImgMyState:&TI
&&&&ImgEmail:&TI
&&&&LblMailCount:&TL
&&&&PopFile:&TbsSkinPopupM
&&&&MOpen:&TMenuI
&&&&MConnect:&TMenuI
&&&&MConnectSet:&TMenuI
&&&&MDisconnect:&TMenuI
&&&&C1:&TMenuI
&&&&MChangeNameAndPassword:&TMenuI
&&&&N10:&TMenuI
&&&&MAutoBusy:&TMenuI
&&&&MAutoLeave:&TMenuI
&&&&N12:&TMenuI
&&&&MOffline:&TMenuI
&&&&N13:&TMenuI
&&&&MOther:&TMenuI
&&&&NMeeting:&TMenuI
&&&&MRepast:&TMenuI
&&&&MPhone:&TMenuI
&&&&MLeave:&TMenuI
&&&&MWillBack:&TMenuI
&&&&MBusy:&TMenuI
&&&&MOnline:&TMenuI
&&&&N17:&TMenuI
&&&&MSendMsg:&TMenuI
&&&&MSendFile:&TMenuI
&&&&MSendVoice:&TMenuI
&&&&MSendVideo:&TMenuI
&&&&N18:&TMenuI
&&&&MAVSets:&TMenuI
&&&&N19:&TMenuI
&&&&MShowHistory:&TMenuI
&&&&N20:&TMenuI
&&&&MExit:&TMenuI
&&&&MMyState:&TMenuI
&&&&PpMenuRight:&TbsSkinPopupM
&&&&PopupMenuShortCut:&TbsSkinPopupM
&&&&PpMenuStates:&TbsSkinPopupM
&&&&NR1:&TMenuI
&&&&NR2:&TMenuI
&&&&NR3:&TMenuI
&&&&NR4:&TMenuI
&&&&N1:&TMenuI
&&&&sdfa1:&TMenuI
&&&&NR5:&TMenuI
&&&&N2:&TMenuI
&&&&NNewGroup:&TMenuI
&&&&NDelGroup:&TMenuI
&&&&NAddGroupMember:&TMenuI
&&&&NRemoveFromGroup:&TMenuI
&&&&N8:&TMenuI
&&&&NS1:&TMenuI
&&&&NS2:&TMenuI
&&&&NS3:&TMenuI
&&&&NS4:&TMenuI
&&&&NS5:&TMenuI
&&&&NS6:&TMenuI
&&&&NS7:&TMenuI
&&&&NS8:&TMenuI
&&&&N3:&TMenuI
&&&&NS9:&TMenuI
&&&&bsResourceStrData1:&TbsResourceStrD
&&&&NMoveTo:&TMenuI
&&&&N4:&TMenuI
&&&&MDownUPGroup:&TMenuI
&&&&N6:&TMenuI
&&&&N7:&TMenuI
&&&&procedure&TrevUserListGetImageIndex(Sender:&TO&Node:&TTreeNode);
&&&&procedure&TrevUserListCustomDrawItem(Sender:&TCustomTreeV
&&&&&&Node:&TTreeN&State:&TCustomDrawS&var&DefaultDraw:&Boolean);
&&&&procedure&MConnectClick(Sender:&TObject);
&&&&procedure&MTreeClick(Sender:&TObject);
&&&&procedure&MOnOrOffClick(Sender:&TObject);
&&&&procedure&MOfflineClick(Sender:&TObject);
&&&&procedure&MOtherClick(Sender:&TObject);
&&&&procedure&TrevUserListDblClick(Sender:&TObject);
&&&&procedure&ClientLogin();
&&&&procedure&ClientLogout();
&&&&procedure&ActiveFormCreate(Sender:&TObject);
&&&&procedure&MDisconnectClick(Sender:&TObject);
&&&&procedure&ApplicationEvents1Exception(Sender:&TO&E:&Exception);
&&&&procedure&LblMyStateClick(Sender:&TObject);
&&&&procedure&HartTimerTimer(Sender:&TObject);
&&&&procedure&TrevUserListMouseDown(Sender:&TO&Button:&TMouseB
&&&&&&Shift:&TShiftS&X,&Y:&Integer);
&&&&procedure&TrevUserListChange(Sender:&TO&Node:&TTreeNode);
&&&&procedure&MAutoLeaveClick(Sender:&TObject);
&&&&procedure&MAutoBusyClick(Sender:&TObject);
&&&&procedure&NR2Click(Sender:&TObject);
&&&&procedure&NR3Click(Sender:&TObject);
&&&&procedure&NR4Click(Sender:&TObject);
&&&&procedure&CoolTrayIconDblClick(Sender:&TObject);
&&&&procedure&NR5Click(Sender:&TObject);
&&&&procedure&TrevUserListMouseMove(Sender:&TO&Shift:&TShiftS&X,
&&&&&&Y:&Integer);
&&&&procedure&STimerTimer(Sender:&TObject);
&&&&procedure&ActiveFormDestroy(Sender:&TObject);
&&&&procedure&FormClose(Sender:&TO&var&Action:&TCloseAction);
&&&&procedure&MExitClick(Sender:&TObject);
&&&&procedure&FormShow(Sender:&TObject);
&&&&procedure&TimerAutoConnectTimer(Sender:&TObject);
&&&&procedure&MGroupClick(Sender:&TObject);
&&&&procedure&NNewGroupClick(Sender:&TObject);
&&&&procedure&NDelGroupClick(Sender:&TObject);
&&&&procedure&NRemoveFromGroupClick(Sender:&TObject);
&&&&procedure&NAddGroupMemberClick(Sender:&TObject);
&&&&procedure&MConnectSetClick(Sender:&TObject);
&&&&procedure&MShowSysHistoryClick(Sender:&TObject);
&&&&procedure&LblFileClick(Sender:&TObject);
&&&&procedure&ImgClosedClick(Sender:&TObject);
&&&&procedure&ImgMinMouseDown(Sender:&TO&Button:&TMouseB
&&&&&&Shift:&TShiftS&X,&Y:&Integer);
&&&&procedure&ImgMinMouseUp(Sender:&TO&Button:&TMouseB
&&&&&&Shift:&TShiftS&X,&Y:&Integer);
&&&&procedure&LblFileMouseMove(Sender:&TO&Shift:&TShiftS&X,
&&&&&&Y:&Integer);
&&&&procedure&TimerTopBarTimer(Sender:&TObject);
&&&&procedure&LblFileMouseDown(Sender:&TO&Button:&TMouseB
&&&&&&Shift:&TShiftS&X,&Y:&Integer);
&&&&procedure&ImgMinClick(Sender:&TObject);
&&&&procedure&ImgTitleMouseDown(Sender:&TO&Button:&TMouseB
&&&&&&Shift:&TShiftS&X,&Y:&Integer);
&&&&procedure&LblMailCountClick(Sender:&TObject);
&&&&procedure&MAVSetsClick(Sender:&TObject);
&&&&procedure&ClientTCPDisconnected(Sender:&TObject);
&&&&procedure&ClientTCPConnected(Sender:&TObject);
&&&&procedure&TimeCheckTransmitFileErrorTimer(Sender:&TObject);
&&&&procedure&FormResize(Sender:&TObject);
&&&&procedure&MsgTimerTimer(Sender:&TObject);
&&&&procedure&KeepP2PSessionTimerTimer(Sender:&TObject);
&&&&procedure&TimerLogingTimer(Sender:&TObject);
&&&&procedure&TimeCheckAVErrorTimer(Sender:&TObject);
&&&&procedure&MChangeNameAndPasswordClick(Sender:&TObject);
&&&&procedure&N14Click(Sender:&TObject);
&&&&procedure&N17Click(Sender:&TObject);
&&&&procedure&N16Click(Sender:&TObject);
&&&&procedure&PpMenuRightPopup(Sender:&TObject);
&&&&procedure&N4Click(Sender:&TObject);
&&&&procedure&MDownUPGroupClick(Sender:&TObject);
&&&&procedure&N6Click(Sender:&TObject);
&&&&procedure&N7Click(Sender:&TObject);
&&&&ImgIndex,LastImgIndex:I
&&&&procedure&ReG
&&&&procedure&MoveAllToF
&&&&procedure&LoadG
&&&&procedure&SaveG
&&&&function&HasGroup(name:&&node:&TTreeNode=nil):&
&&&&procedure&MenuMoveToClick(Sender:&TObject);
&&&&procedure&LoadGroupMenu(Node:TTreeNode);
&&protected
&&&&{&Protected&declarations&}
&&&&IsInIE:B
&&&&HotKeyMgrIsProcessing:B
&&&&CurNode:TTreeN
&&&&procedure&SendI
&&&&procedure&GetInit();
&&&&procedure&UpdateListViewStates(TV:TBSSkinTreeVNode:TTreeNode);
&&&&procedure&UpdateMyState();
&&&&procedure&ChangeMyState(State:&SIsAutoState:Boolean=False);&&
&&&&procedure&ChangeLblMyStateCaption();
&&&&procedure&FlashTray(ChatingForm:TChatingForm);
&&&&procedure&Login();
&&&&procedure&GetListViewData(TV:TBSSkinTreeVViewStyle:TViewStyle&=&vsTIsForSelForm:Boolean=False);&&//显示用户列表
&&&&procedure&GetListViewData2(TV:TBSSkinTreeVViewStyle:TViewStyle&=&vsGIsForSelForm:Boolean=False);&&//显示用户列表
&&&&procedure&TestVideoDevice();
&&&&procedure&TestAudioDevice();
&&&&procedure&ShowImage(PHandle:HWND;BitMap:HBitMBuf:&PByte);
&&&&procedure&WMDEVICECHANGE(var&msgx:&Tmessage);&message&WM_DEVICECHANGE;
&&&&procedure&WMMOVE(var&Msg:&TMessage);&message&WM_MOVE;
&&&&procedure&ProcessCBInputing(CBInputing:TCBInputing);
&&&&procedure&ProcessCBReturnMessage(CBReturnMessage:&TCBReturnMessage);
&&&&procedure&ProcessCBMessage(CBMessage:&TCBMessage);
&&&&procedure&ProcessCBSendFileResult(CBSendFileResult:&TCBSendFileResult);
&&&&procedure&ProcessCBSendFilePackage(CBSendFilePackage:&TCBSendFilePackage);
&&&&procedure&ProcessCBAudio(CBAudio:&TCBAudio);
&&&&procedure&ProcessCBVideo(CBVideo:&TCBVideo);
&&TClientHandleThread&=&class(TThread)
&&&&private
&&&&&&FLock:&TCriticalS
&&&&&&CBLoginResult:TCBLoginR
&&&&&&CBSendBranch:TCBSendB
&&&&&&CBSendEmployee:TCBSendE
&&&&&&CBStateChanged:TCBStateC
&&&&&&CBInputing:TCBI
&&&&&&CBMessage:TCBM
&&&&&&CBReturnMessage:TCBReturnM
&&&&&&CBAddUser:TCBAddU
&&&&&&CBSendFileRequest:TCBSendFileR
&&&&&&CBSendFileCancle:TCBSendFileC
&&&&&&CBSendFileStop:TCBSendFileS
&&&&&&CBSendFileResponse:TCBSendFileR
&&&&&&CBSendFileResult:TCBSendFileR
&&&&&&CBSendFilePackage:TCBSendFileP
&&&&&&CBSendFileResume:TCBSendFileR
&&&&&&CBSendFileCompleted:TCBSendFileC
&&&&&&CBAudioRequest:TCBAudioR
&&&&&&CBAudioResponse:TCBAudioR
&&&&&&CBAudioCancel:TCBAudioC
&&&&&&CBAudio:TCBA
&&&&&&CBAudioStop:TCBAudioS
&&&&&&CBVideoRequest:TCBVideoR
&&&&&&CBVideoResponse:TCBVideoR
&&&&&&CBVideoCancel:TCBVideoC
&&&&&&CBVideoStop:TCBVideoS
&&&&&&CBSetBitmapInfo:TCBSetBitmapI
&&&&&&CBSetCompvars:TCBSetC
&&&&&&CBVideo:TCBV
&&&&&&CBBeginTalk:TCBBeginT
&&&&&&CBPleaseUseTCP:TCBPleaseUseTCP;
&&&&&&CBNameAndPasswordChanged:TCBNameAndPasswordC
&&&&&&procedure&ProcessCBSendB
&&&&&&procedure&ProcessCBSendE
&&&&&&procedure&ProcessCBLoginR
&&&&&&procedure&ProcessCBStateC
&&&&&&procedure&ProcessCBI
&&&&&&procedure&ProcessCBM
&&&&&&procedure&ProcessCBReturnM
&&&&&&procedure&ProcessCBAddU
&&&&&&procedure&ProcessCBSendFileR
&&&&&&procedure&ProcessCBSendFileC
&&&&&&procedure&ProcessCBSendFileS
&&&&&&procedure&ProcessCBSendFileR
&&&&&&procedure&ProcessCBSendFileR
&&&&&&procedure&ProcessCBSendFileP
&&&&&&procedure&ProcessCBSendFileR
&&&&&&procedure&ProcessCBSendFileC
&&&&&&procedure&ProcessCBAudioR
&&&&&&procedure&ProcessCBAudioR
&&&&&&procedure&ProcessCBAudioC
&&&&&&procedure&ProcessCBA
&&&&&&procedure&ProcessCBAudioS
&&&&&&procedure&ProcessCBVideoR
&&&&&&procedure&ProcessCBVideoR
&&&&&&procedure&ProcessCBVideoC
&&&&&&procedure&ProcessCBVideoS
&&&&&&procedure&ProcessCBSetBitmapI
&&&&&&procedure&ProcessCBSetC
&&&&&&procedure&ProcessCBV
&&&&&&procedure&ProcessCBBeginT
&&&&&&procedure&ProcessCBPleaseUseTCP;
&&&&&&procedure&ProcessCBNameAndPasswordC
&&&&public
&&&&&&constructor&C
&&&&&&destructor&D&
&&&&&&procedure&E&
&&ConnectedTicket:C
&&RealMessengerX:TRealMessengerX;
&&CheckPOP3ThreadHandle:TH
&&ClientHandleThread:&TClientHandleT
&&LastMailCount,CurrentMailCount:I
implementation
uses&ComObj,&ComServ,LoginFrm,SelUserFrm,&AboutFrm,&TempFrm,&VideoFrm,
&&CopyScreenFrm,&AVSetFrm,&ChangeNameAndPasswordFrm,&unitF
{$R&*.DFM}
function&GetFormNameAt&(&X,&Y&:&integer&)&:&
&&&W:TWinC
&&&P.X&:=&X;
&&&P.Y&:=&Y;
&&&W&:=&FindVCLWindow(P);
&&&if&(&nil&&&&W&)&then
&&&&&&while&w.Parent&&nil&do
&&&&&&&&w:=w.P
&&&&&&Result&:=&W.N
&&&&Result&:=&'';
{------------------------------------------------------------------------------}
{邮箱监测}
function&CheckPOP3Thread(Info:&Pointer):&I&
&&LastMailCount:=-1;
&&CurrentMailCount:=-1;
&&while&True&do
&&&&if&RealMessengerX.ClientPOP3.Host&&''&then
&&&&&&&&try
&&&&&&&&&&if&RealMessengerX.ClientPOP3.Connected&then&RealMessengerX.ClientPOP3.D
&&&&&&&&&&RealMessengerX.ClientPOP3.Connect();
&&&&&&&&&&LastMailCount:=CurrentMailC
&&&&&&&&&&CurrentMailCount:=RealMessengerX.ClientPOP3.CheckM
&&&&&&&&&&RealMessengerX.LblMailCount.Caption:=IntToStr(CurrentMailCount)+'&封电子邮件';
&&&&&&&&except
&&&&&&&&&&LastMailCount:=-1;
&&&&&&&&&&CurrentMailCount:=-1;
&&&&&&&&&&RealMessengerX.LblMailCount.Caption:='未能连接至POP3服务器';
&&&&&&finally
&&&&&&&&RealMessengerX.ClientPOP3.D
&&&&&&RealMessengerX.LblMailCount.Caption:='点击设置您的邮箱';
&&&&Sleep(60000);
&&Result:=0;
{------------------------------------------------------------------------------}
功能:设置窗口样式(无标题栏,有边框)
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.WMDEVICECHANGE(var&msgx:&TMessage);
&&DBT_DEVICEARRIVAL&=&$8000;
&&DBT_DEVICEREMOVECOMPLETE&=&$8004;
&&if&Me=nil&then&
&&TestVideoDevice();
&&ChangeMyState(Me.State);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.WMMOVE(var&Msg:&TMessage);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.TestAudioDevice();
&&&&if&Device.DeviceCount&0&then
&&&&&&HaveAudioDevice:=True
&&&&&&HaveAudioDevice:=F
&&&&HaveAudioDevice:=F
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.TestVideoDevice();
&&SysDev:&TSysDevE
&&SysDev:=&TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
&&if&SysDev.CountFilters&&&0&then
&&&&HaveVideoDevice:=True
&&&&HaveVideoDevice:=F
&&SysDev.F
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.ActiveFormCreate(Sender:&TObject);
&&TempReg&&&&&&&&&:TR
&&lgtick1,lgtick2:Int64;
&//&FillD&&&//张加入,测试用
&&queryperformancefrequency(performancefrequency_s);
&&performancefrequency_ms:=performancefrequency_s/1000;
&&//DoubleBuffered:=T
&&&&UnInitC
&&MySockets&&&&&&&:=&Classes.TThreadList.C
&&ReceivedMessages:=&Classes.TThreadList.C
&&MsgReturnCheck&&:=&Classes.TThreadList.C
&&Branchs&&&&&&&&&:=&Classes.TThreadList.C
&&Employees&&&&&&&:=&Classes.TThreadList.C
&&TransmitFiles&&&:=&Classes.TThreadList.C
&&AudioHandShakes&:=&Classes.TThreadList.C
&&VideoHandShakes&:=&Classes.TThreadList.C
&&ChatingFormList&:=&TList.C
&&MsgFormList&&&&&:=&TList.C
&&MsgAlertQueue&&&:=TList.Create();
&&if&ApplicationPath=''&then
&&&&ApplicationPath&&:=ExtractFilePath(Application.ExeName);
&&&&ResPath&&&&&&&&&&:=ApplicationP
&&&&SoundPath&&&&&&&&:=ApplicationPath+'Sound';
&&&&CachePath&&&&&&&&:=ApplicationPath+'Cache';
&&&&HistoryPath&&&&&&:=ApplicationPath+'History';
&&&&PicPath&&&&&&&&&&:=ApplicationPath+'Pic';
&ImgListMain:=ImglstTreeI
&TVMain:=TrevUserL
&MACNO:=GetNetBIOSA
&CoolTrayIcon.Hint:=Application.Title+'&--&未登录';
&Caption:=Application.T
&TestAudioDevice();
&TestVideoDevice();
&TempReg:=TRegistry.C
&&&&TempReg.RootKey:=HKEY_LOCAL_MACHINE;
&&&&if&TempReg.OpenKey(AppKey+'FormStore',&True)&then
&&&&&&Width:=218;
&&&&&&Height:=Screen.WorkAreaHeight-(Screen.WorkAreaHeight&div&3);
&&&&&&Left:=Screen.WorkAreaWidth-218;
&&&&&&top:=(Screen.WorkAreaHeight-Height)&div&2;
&&&&&&if&trim(TempReg.ReadString('Left'))&&''&then&Left:=StrToInt(TempReg.ReadString('Left'));
&&&&&&if&trim(TempReg.ReadString('Top'))&&''&then&Top:=StrToInt(TempReg.ReadString('Top'));
&&&&&&if&trim(TempReg.ReadString('Width'))&&&''&then&Width:=StrToInt(TempReg.ReadString('Width'));
&&&&&&if&trim(TempReg.ReadString('Height'))&&''&then&Height:=StrToInt(TempReg.ReadString('Height'));
&&&&if&TempReg.OpenKey(AppKey+'Login',&True)&then
&&&&&&LoginName:=TempReg.ReadString('UserName');
&&&&&&Password:=DESryStrHex(TempReg.ReadString('Password'),DESKEY);
&&&&&&if&Trim(TempReg.ReadString('LoginState'))=''&then&TempReg.WriteString('LoginState','联机');
&&&&&&LoginState:=TempReg.ReadString('LoginState');
&&&&&&HostName:=TempReg.ReadString('HostName');
&&&&&&HostToIP(HostName,HostIP);
&&&&&&if&Trim(TempReg.ReadString('ProxyCategory'))=''&then&TempReg.WriteString('ProxyCategory','0');
&&&&&&ProxyCategory:=TProxyCategory(StrToInt(TempReg.ReadString('ProxyCategory')));
&&&&&&ProxyAddress:=TempReg.ReadString('ProxyAddress');
&&&&&&if&TempReg.ReadString('ProxyPort')=''&then&TempReg.WriteString('ProxyPort','1080');
&&&&&&ProxyPort:=StrToInt(TempReg.ReadString('ProxyPort'));
&&&&&&ProxyUsername:=TempReg.ReadString('ProxyUsername');
&&&&&&ProxyPassword:=TempReg.ReadString('ProxyPassword');
&&&&&&if&ProxyAddress&&''&then&HostToIP(ProxyAddress,ProxyAddress);
&&&&&&if&TempReg.ReadString('ServerPort')=''&then&TempReg.WriteString('ServerPort','0');
&&&&&&ServerPort:=StrToInt(TempReg.ReadString('ServerPort'));
&&&&&&if&TempReg.ReadString('MsgSound')=''&then&TempReg.WriteString('MsgSound',SoundPath+'Type.wav');
&&&&&&MsgSound:=TempReg.ReadString('MsgSound');
&&&&&&if&TempReg.ReadString('DontPlaySound')=''&then&TempReg.WriteString('DontPlaySound','0');
&&&&&&DontPlaySound:=Boolean(StrToInt(TempReg.ReadString('DontPlaySound')));
&&&&&&if&TempReg.ReadString('AutoConnectInterval')=''&then&TempReg.WriteString('AutoConnectInterval','180');
&&&&&&AutoConnectInterval:=StrToInt(TempReg.ReadString('AutoConnectInterval'));
&&&&&&if&TempReg.ReadString('DontAutoConnect')=''&then&TempReg.WriteString('DontAutoConnect','0');
&&&&&&DontAutoConnect:=Boolean(StrToInt(TempReg.ReadString('DontAutoConnect')));
&&&&&&if&(TempReg.ReadString('SavePass')='1')&and&(LoginName&&'')&and&(HostName&&'')&then
&&&&&&begin
&&&&&&&&GetInit();
&&&&&&&&SendIdentity();
&&&&&&else
&&&&&&begin
&&&&&&&&Login();
&&&&TempReg.F
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.GetListViewData(TV:TBSSkinTreeVViewStyle:TViewStyle&=&vsTIsForSelForm:Boolean=False);
&&iLoop,jLoop,kLoop&:I
&&BranchPointer,TmpBranch:PB
&&EmployeePointer&&&&:PE
&&TempReg:TR
&&Keys,Values:TS
&&GroupNode:TTreeN
&&TempEmployees,TempBranchs:TThreadL
&&OnlineNode:=
&&OfflineNode:=
&&if&IsForSelForm&then
&&&&TempEmployees:=TThreadList.C
&&&&TempBranchs:=TThreadList.C
&&&&with&Employees.LockList&do
&&&&&&for&iLoop:=0&to&Count-1&do
&&&&&&begin
&&&&&&&&GetMem(EmployeePointer,SizeOf(Employee));
&&&&&&&&CopyMemory(EmployeePointer,Items[iLoop],SizeOf(Employee));
&&&&&&&&TempEmployees.Add(EmployeePointer);
&&&&finally
&&&&&&Employees.UnlockL
&&&&with&Branchs.LockList&do
&&&&&&for&iLoop:=0&to&Count-1&do
&&&&&&begin
&&&&&&&&GetMem(BranchPointer,SizeOf(Employee));
&&&&&&&&CopyMemory(BranchPointer,Items[iLoop],SizeOf(Branch));
&&&&&&&&TempBranchs.Add(BranchPointer);
&&&&finally
&&&&&&Branchs.UnlockL
&&&&TempEmployees:=E
&&&&TempBranchs:=B
&&&&TV.Items.C
&&&&if&ViewStyle=vsTree&then&{显示树型方式}
&&&&&&TV.ShowButtons:=T
&&&&&&TV.ShowLines:=T
&&&&&&with&TempBranchs.LockList&do
&&&&&&&&for&iLoop:=0&to&Count-1&do&{添加顶层部门列表}
&&&&&&&&begin
&&&&&&&&&&BranchPointer&:=Items[iLoop];
&&&&&&&&&&BranchPointer.Node:=&TV.Items.AddChildObject(nil,BranchPointer.Name,BranchPointer);
&&&&&&&&&&BranchPointer.Node.StateIndex&:=1&{1表示为部门};
&&&&&&&&&//for
&&&&&&&&for&iLoop:=0&to&Count-1&do&{添加子部门列表}
&&&&&&&&begin
&&&&&&&&&&BranchPointer&:=Items[iLoop];
&&&&&&&&&&for&jLoop:=0&to&Count-1&do
&&&&&&&&&&begin
&&&&&&&&&&&&TmpBranch&:=Items[jLoop];
&&&&&&&&&&&&if&BranchPointer.ParentID=TmpBranch.ID&then
&&&&&&&&&&&&begin
&&&&&&&&&&&&&&BranchPointer.Node.MoveTo(TmpBranch.Node,naAddChild);
&&&&&&&&&&&&&&TmpBranch.Node.Expanded:=F
&&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&
&&&&&&finally
&&&&&&&&TempBranchs.UnlockL
&&&&&&with&TempEmployees.LockList&do
&&&&&&&&for&iLoop:=Count-1&downto&0&do&{添加用户列表}
&&&&&&&&begin
&&&&&&&&&&EmployeePointer&:=Items[iLoop];
&&&&&&&&&&with&TempBranchs.LockList&do
&&&&&&&&&&try
&&&&&&&&&&&&for&jLoop:=0&to&Count-1&do
&&&&&&&&&&&&begin
&&&&&&&&&&&&&&if&(PBranch(Items[jLoop])^.ID&=&EmployeePointer.BranchID)&then
&&&&&&&&&&&&&&begin
&&&&&&&&&&&&&&&&&&EmployeePointer.Node&&&&&&&&&&&&:=&TV.Items.AddChildObjectFirst(PBranch(Items[jLoop])^.Node,EmployeePointer.Name,EmployeePointer);
&&&&&&&&&&&&&&&&&&EmployeePointer.Node.StateIndex&:=2&{2表示为用户};
&&&&&&&&&&&&&&&&&&UpdateListViewStates(TV,EmployeePointer.Node);&{更新用户状态}
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&//for
&&&&&&&&&&finally
&&&&&&&&&&&&TempBranchs.UnlockL
&&&&&&&&&&
&&&&&&&&&//for
&&&&&&finally
&&&&&&&&TempEmployees.UnlockL
&&&&&&if&not&IsForSelForm&then&Me.Node.MakeV&{展开当前户名所在的节点}
&&&&if&ViewStyle=vsOnlineOffline&then
&&&&&&TV.ShowButtons:=F
&&&&&&TV.ShowLines:=F
&&&&&&OnlineNode:=TV.Items.AddChild(nil,'联机');
&&&&&&OnlineNode.StateIndex:=&-1;
&&&&&&OfflineNode:=TV.Items.AddChild(nil,'没有联机');
&&&&&&OfflineNode.StateIndex:=&-1;
&&&&&&with&TempEmployees.LockList&do
&&&&&&&&for&iLoop:=0&to&Count-1&do
&&&&&&&&begin
&&&&&&&&&&EmployeePointer&&&&&&:=Items[iLoop];
&&&&&&&&&&EmployeePointer.Node&:=&TV.Items.AddChildObject(OfflineNode,EmployeePointer.Name,EmployeePointer);
&&&&&&&&&&EmployeePointer.Node.StateIndex&:=2;
&&&&&&&&&&UpdateListViewStates(TV,EmployeePointer.Node)
&&&&&&finally
&&&&&&&&TempEmployees.UnlockL
&&&&&&OfflineNode.Expanded:=T
&&&&if&ViewStyle=vsGroup&then&{显示组方式}
&&&&&&TV.ShowButtons:=F
&&&&&&TV.ShowLines:=F
&&&&&&with&TempEmployees.LockList&do
&&&&&&&&for&iLoop:=0&to&Count-1&do
&&&&&&&&begin
&&&&&&&&&&EmployeePointer:=Items[iLoop];
&&&&&&&&&&EmployeePointer.Node:=
&&&&&&finally
&&&&&&&&TempEmployees.UnlockL
&&&&&&TempReg:=TRegistry.C
&&&&&&&&TempReg.RootKey:=HKEY_LOCAL_MACHINE;
&&&&&&&&if&not&TempReg.KeyExists(AppKey+''+LoginName+'Group')&then
&&&&&&&&begin
&&&&&&&&&&if&TempReg.OpenKey(AppKey+''+LoginName+'Group本部门',True)&then
&&&&&&&&&&begin
&&&&&&&&&&&&with&TempEmployees.LockList&do
&&&&&&&&&&&&try
&&&&&&&&&&&&&&for&iLoop:=0&to&Count-1&do
&&&&&&&&&&&&&&begin
&&&&&&&&&&&&&&&&EmployeePointer:=Items[iLoop];
&&&&&&&&&&&&&&&&if&EmployeePointer.BranchID=Me.BranchID&then&TempReg.WriteString(IntToStr(EmployeePointer.ID),EmployeePointer.LoginName);
&&&&&&&&&&&&&&
&&&&&&&&&&&&finally
&&&&&&&&&&&&&&TempEmployees.UnlockL
&&&&&&&&&&&&
&&&&&&&&&&
&&&&&&&&if&TempReg.OpenKey(AppKey+''+LoginName+'Group',&True)&then
&&&&&&&&begin
&&&&&&&&&&Keys:=TStringList.C
&&&&&&&&&&TempReg.GetKeyNames(Keys);
&&&&&&&&&&for&iLoop:=0&to&Keys.Count-1&do
&&&&&&&&&&begin
&&&&&&&&&&&&GroupNode:=TV.Items.AddChild(nil,Keys.Strings[iLoop]);
&&&&&&&&&&&&GroupNode.StateIndex:=&-1;&{-1表示自定义组方式}
&&&&&&&&&&&&if&TempReg.OpenKey(AppKey+''+LoginName+'Group'+Keys.Strings[iLoop],&True)&then
&&&&&&&&&&&&begin
&&&&&&&&&&&&&&Values:=TStringList.C
&&&&&&&&&&&&&&TempReg.GetValueNames(Values);
&&&&&&&&&&&&&&for&jLoop:=0&to&Values.Count-1&do
&&&&&&&&&&&&&&begin
&&&&&&&&&&&&&&&&with&TempEmployees.LockList&do
&&&&&&&&&&&&&&&&try
&&&&&&&&&&&&&&&&&&for&kLoop:=0&to&Count-1&do
&&&&&&&&&&&&&&&&&&begin
&&&&&&&&&&&&&&&&&&&&EmployeePointer&&&&&&:=Items[kLoop];
&&&&&&&&&&&&&&&&&&&&if&EmployeePointer.ID&=&StrToInt(Values.Strings[jLoop])&then
&&&&&&&&&&&&&&&&&&&&begin
&&&&&&&&&&&&&&&&&&&&&&EmployeePointer.Node&:=&TV.Items.AddChildObject(GroupNode,EmployeePointer.Name,EmployeePointer);
&&&&&&&&&&&&&&&&&&&&&&EmployeePointer.Node.StateIndex&:=2&&&{2表示为用户};
&&&&&&&&&&&&&&&&&&&&&&UpdateListViewStates(TV,EmployeePointer.Node);&{更新用户状态}
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&finally
&&&&&&&&&&&&&&&&&&TempEmployees.UnlockList
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&//for
&&&&&&&&&&&&&&Values.F
&&&&&&&&&&&&//if
&&&&&&&&&&&&GroupNode.Expanded:=T
&&&&&&&&&&&//for
&&&&&&&&&&Keys.F
&&&&&&&&//if
&&&&&&finally
&&&&&&&&TempReg.F
&&&&if&TV.Items.GetFirstNode&&nil&then&TV.Items.GetFirstNode.Selected:=T
&&&&if&TV.Items.GetFirstNode&&nil&then&TV.Items.GetFirstNode.Selected:=F
&&&&if&IsForSelForm&then
&&&&&&TempEmployees.C
&&&&&&TempEmployees.F
&&&&&&TempBranchs.C
&&&&&&TempBranchs.F
//用新的分组方式
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.GetListViewData2(TV:TBSSkinTreeVViewStyle:TViewStyle&=&vsGIsForSelForm:Boolean=False);
&&iLoop,jLoop,kLoop&:I
&&BranchPointer,TmpBranch:PB
&&EmployeePointer&&&&:PE
&&TempReg:TR
&&Keys,Values:TS
&&GroupNode:TTreeN
&&TempEmployees,TempBranchs:TThreadL
&&OnlineNode:=
&&OfflineNode:=
&&if&IsForSelForm&then
&&&&TempEmployees:=TThreadList.C
&&&&TempBranchs:=TThreadList.C
&&&&with&Employees.LockList&do
&&&&&&for&iLoop:=0&to&Count-1&do
&&&&&&begin
&&&&&&&&GetMem(EmployeePointer,SizeOf(Employee));
&&&&&&&&CopyMemory(EmployeePointer,Items[iLoop],SizeOf(Employee));
&&&&&&&&TempEmployees.Add(EmployeePointer);
&&&&finally
&&&&&&Employees.UnlockL
&&&&with&Branchs.LockList&do
&&&&&&for&iLoop:=0&to&Count-1&do
&&&&&&begin
&&&&&&&&GetMem(BranchPointer,SizeOf(Employee));
&&&&&&&&CopyMemory(BranchPointer,Items[iLoop],SizeOf(Branch));
&&&&&&&&TempBranchs.Add(BranchPointer);
&&&&finally
&&&&&&Branchs.UnlockL
&&&&TempEmployees:=E
&&&&TempBranchs:=B
&&&&TV.Items.C
&&&&&&&&&&GroupNode:=Tv.Items.AddChild(nil,'我的好友');
&&&&&&GroupNode.StateIndex:=&-1;&{-1表示自定义组方式}
&&&&&//&GroupNode.ID:=-2;&&&&&&&&&&&{没什么意义}
&&&&//&if&ViewStyle=vsGroup&then&{显示组方式}
&&&&//&begin
&&&&&&TV.ShowButtons:=F
&&&&&&TV.ShowLines:=F
&&&&&&with&TempEmployees.LockList&do
&&&&&&&&for&iLoop:=0&to&Count-1&do
&&&&&&&&begin
&&&&&&&&&&EmployeePointer:=Items[iLoop];
&&&&&&&&&&EmployeePointer.Node:=
&&&&&&finally
&&&&&&&&TempEmployees.UnlockL
&&&&&&with&TempEmployees.LockList&do
&&&&&&&&try
&&&&&&&&&for&kLoop:=0&to&Count-1&do
&&&&&&&&&begin
&&&&&&&&&&&EmployeePointer&&&&&&:=Items[kLoop];
&&&&&&&&&&&&&EmployeePointer.Node&:=&TV.Items.AddChildObject(GroupNode,EmployeePointer.Name,EmployeePointer);
&&&&&&&&&&&&&EmployeePointer.Node.StateIndex&:=2&&&{2表示为用户};
&&&&&&&&&&&&//&EmployeePointer.Node.ID:=EmployeePointer.ID;
&&&&&&&&&&//&&&EmployeePointer.Node.Code:=LoginName&;
&&&&&&&&&&&&&UpdateListViewStates(TV,EmployeePointer.Node);&{更新用户状态}
&&&&&&&&finally
&&&&&&&&&&TempEmployees.UnlockList
&&&&&&&&ReG
&&&&if&TV.Items.GetFirstNode&&nil&then&TV.Items.GetFirstNode.Selected:=T
&&&&if&TV.Items.GetFirstNode&&nil&then&TV.Items.GetFirstNode.Selected:=F
&&&&if&IsForSelForm&then
&&&&&&TempEmployees.C
&&&&&&TempEmployees.F
&&&&&&TempBranchs.C
&&&&&&TempBranchs.F
{------------------------------------------------------------------------------}
{更改当前用户的显示状态}
procedure&TRealMessengerX.ChangeLblMyStateCaption();
&&iLoop,jLoop,GBBytes,IconIndex:I
&&ShowName:S
&&if&Me&&nil&then
&&&&lblMyState.Caption:=Me.Name&+&'('+Me.State&+&')';
&&&&CoolTrayIcon.Hint:=Application.Title+'&--&'&+&Me.Name&+&'('+Me.State&+&')';
&&&&IconIndex:=2;
&&&&NS8.Checked:=T
&&&&MOther.Checked:=T
&&&&if&Me.State='断开'&then
&&&&&&IconIndex:=0;
&&&&&&NS8.Checked:=F
&&&&&&MOther.Checked:=F
&&&&if&Me.State='显示为脱机'&then
&&&&&&IconIndex:=4;
&&&&&&NS9.Checked:=T
&&&&&&MOffline.Checked:=T
&&&&if&Me.State='联机'&then
&&&&&&IconIndex:=1;
&&&&&&NS1.Checked:=T
&&&&&&MOnline.Checked:=T
&&&&if&Me.State='忙碌'&then
&&&&&&IconIndex:=3;
&&&&&&NS2.Checked:=T
&&&&&&MBusy.Checked:=T
&&&&if&Me.State='马上回来'&then
&&&&&&IconIndex:=2;
&&&&&&NS3.Checked:=T
&&&&&&MWillBack.Checked:=T
&&&&if&Me.State='离开'&then
&&&&&&IconIndex:=2;
&&&&&&NS4.Checked:=T
&&&&&&MLeave.Checked:=T
&&&&if&Me.State='接听电话'&then
&&&&&&IconIndex:=3;
&&&&&&NS5.Checked:=T
&&&&&&MPhone.Checked:=T
&&&&if&Me.State='外出就餐'&then
&&&&&&IconIndex:=2;
&&&&&&NS6.Checked:=T
&&&&&&MRepast.Checked:=T
&&&&if&Me.State='参加会议'&then
&&&&&&IconIndex:=3;
&&&&&&NS7.Checked:=T
&&&&&&NMeeting.Checked:=T
&&&&lblMyState.Caption:='未登录';
&&&&CoolTrayIcon.Hint:=Application.Title+'&--&未登录';
&&&&IconIndex:=0;
&&if&not&CoolTrayIcon.CycleIcons&then&ImgLstTrayIcon.GetIcon(IconIndex,CoolTrayIcon.Icon);
&&if&Me=nil&then&
&&iLoop:=1;
&&while&(lblMyState.Canvas.TextWidth(lblMyState.Caption)&lblMyState.Width)&and&(iLoop&Length(Me.Name))&do
&&&&ShowName:=Copy(Me.Name,1,Length(Me.Name)-iLoop);
&&&&GBBytes:=0;
&&&&for&jLoop:=1&to&Length(ShowName)&do
&&&&&&if&Ord(ShowName[jLoop])&128&then&Inc(GBBytes);&
&&&&if&GBBytes&mod&2&&0&then&ShowName:=Copy(ShowName,1,Length(ShowName)-1);
&&&&lblMyState.Caption:=ShowName&+&'&...('+Me.State+')';
&&&&Inc(iLoop);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.UpdateMyState();
&&ChangeLblMyStateCaption();
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.UpdateListViewStates(TV:TBSSkinTreeVNode:TTreeNode);
&&BaseImageIndex&&:I
&&Employee&&&&&&&&:PE
&&&&if&Node=nil&then&
&&&&Employee:=Node.D
&&&&BaseImageIndex:=6;
&&&&Employee.Node.Text:='';
&&&&Employee.Node.ImageIndex:=BaseImageI
&&&&if&(AnsiSameText(Employee.State,'显示为脱机')&or&AnsiSameStr(Employee.State,'断开'))&&then
&&&&&&Employee.Node.ImageIndex:=BaseImageI
&&&&&&Employee.Node.Text&&&&&&:=Employee.N
&&&&&&if&(Employee.Node.Parent&&nil)&and&(Employee.Node.Parent=OnlineNode)&then
&&&&&&begin
&&&&&&&&&&try
&&&&&&&&&&&&Employee.Node.MoveTo(OfflineNode,naAddChildFirst);
&&&&&&&&&&&&if&OfflineNode.Count&0&then&OfflineNode.Expanded:=T
&&&&&&&&&&except
&&&&&&&&&&
&&&&if&(Employee.Node.Parent=OfflineNode)&&then
&&&&&&&&Employee.Node.MoveTo(OnlineNode,naAddChildFirst);
&&&&&&&&if&OnlineNode.Count&0&then&OnlineNode.Expanded:=T
&&&&&&except
&&&&if&AnsiSameText(Employee.State,'联机')&then
&&&&&&Employee.Node.ImageIndex:=BaseImageIndex+1;
&&&&&&Employee.Node.Text&&&&&&:=Employee.N
&&&&if&AnsiSameText(Employee.State,'忙碌')&then
&&&&&&Employee.Node.ImageIndex:=BaseImageIndex+3;
&&&&&&Employee.Node.Text&&&&&&:=Employee.Name+'('+Employee.State+')';
&&&&if&AnsiSameText(Employee.State,'马上回来')&then
&&&&&&Employee.Node.ImageIndex:=BaseImageIndex+2;
&&&&&&Employee.Node.Text&&&&&&:=Employee.Name+'('+Employee.State+')';
&&&&if&AnsiSameText(Employee.State,'离开')&then
&&&&&&Employee.Node.ImageIndex:=BaseImageIndex+2;
&&&&&&Employee.Node.Text&&&&&&:=Employee.Name+'('+Employee.State+')';
&&&&if&AnsiSameText(Employee.State,'接听电话')&then
&&&&&&Employee.Node.ImageIndex:=BaseImageIndex+3;
&&&&&&Employee.Node.Text&&&&&&:=Employee.Name+'('+Employee.State+')';
&&&&if&AnsiSameText(Employee.State,'外出就餐')&then
&&&&&&Employee.Node.ImageIndex:=BaseImageIndex+2;
&&&&&&Employee.Node.Text&&&&&&:=Employee.Name+'('+Employee.State+')';
&&&&if&AnsiSameText(Employee.State,'参加会议')&then
&&&&&&Employee.Node.ImageIndex:=BaseImageIndex+3;
&&&&&&Employee.Node.Text&&&&&&:=Employee.Name+'('+Employee.State+')';
&&&&Employee.Node.ImageIndex:=BaseImageIndex+2;
&&&&Employee.Node.Text&&&&&&:=Employee.Name+'('+Employee.State+')';
&&&&//TV.Refresh
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.TrevUserListGetImageIndex(Sender:&TO
&&Node:&TTreeNode);
&&if&Node.StateIndex&=&-1&then
&&&&&&if&Node.Expanded&then
&&&&&&&&Node.ImageIndex:=4
&&&&&&else
&&&&&&&&Node.ImageIndex:=5;
&&if&Node.StateIndex&=&0&then
&&&&&&if&Node.Expanded&then
&&&&&&&&Node.ImageIndex:=1
&&&&&&else
&&&&&&&&Node.ImageIndex:=0;
&&if&Node.StateIndex&=&1&then
&&&&&&if&Node.Expanded&then
&&&&&&&&Node.ImageIndex:=3
&&&&&&else
&&&&&&&&Node.ImageIndex:=2;
&&Node.SelectedIndex:=Node.ImageI
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.TrevUserListCustomDrawItem(
&&Sender:&TCustomTreeV&Node:&TTreeN&State:&TCustomDrawS
&&var&DefaultDraw:&Boolean);
&{&DefaultDraw:=
&&if&Node.Selected&then
&&&&TrevUserList.Canvas.Font.Color:=clW
&&&&if&Node.StateIndex&=&2&then
&&&&&&if&(Node.ImageIndex&=&6)&or&(Node.ImageIndex&=&10)&then
&&&&&&&&TrevUserList.Canvas.Font.Color:=clRed
&&&&&&else
&&&&&&&&TrevUserList.Canvas.Font.Color:=clG
&&&&else&if&Node.StateIndex&=&-1&then
&&&&&&TrevUserList.Canvas.Font.Color:=$00934A46;
&&&&&&TrevUserList.Canvas.Font.Style:=[fsBold];
&&&&&&TrevUserList.Canvas.Font.Color:=clB
&&TrevUserList.Canvas.Textout(Node.DisplayRect(True).Left+2,Node.DisplayRect(True).Top+2,Node.Text);&&}
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.Login();
&&LoginForm:&TLoginF
&&TempReg:TR
&&LoginForm:=TLoginForm.Create(Application);
&&&&TempReg:=TRegistry.C
&&&&&&TempReg.RootKey:=HKEY_LOCAL_MACHINE;
&&&&&&if&TempReg.OpenKey(AppKey+'Login',&True)&then
&&&&&&begin
&&&&&&&&LoginForm.EDUserName.Text:=TempReg.ReadString('UserName');
&&&&&&&&if&LoginForm.ShowModal&&mrOK&then&
&&&&&&&&TempReg.WriteString('UserName',Trim(LoginForm.EDUserName.Text));
&&&&&&&&if&LoginForm.CBSavePass.Checked&then
&&&&&&&&begin
&&&&&&&&&&TempReg.WriteString('SavePass','1');
&&&&&&&&&&TempReg.WriteString('Password',EncryStrHex(Trim(LoginForm.EDPassword.Text),DESKEY));
&&&&&&&&&&TempReg.WriteString('LoginState',Trim(LoginForm.CBState.Text));
&&&&&&&&end
&&&&&&&&else
&&&&&&&&begin
&&&&&&&&&&TempReg.WriteString('SavePass','0');
&&&&&&&&&&TempReg.WriteString('Password','');
&&&&&&&&&&TempReg.WriteString('LoginState','联机');
&&&&&&&&LoginName:=Trim(LoginForm.EDUserName.Text);
&&&&&&&&Password:=Trim(LoginForm.EDPassword.Text);
&&&&&&&&LoginState:=Trim(LoginForm.CBState.Text);
&&&&finally
&&&&&&TempReg.F
&&&&GetInit();
&&&&SendIdentity();
&&&&LoginForm.F
{------------------------------------------------------------------------------}
{点击了登录菜单}
procedure&TRealMessengerX.MConnectClick(Sender:&TObject);
&&if&MConnect.Caption='取消登录(&I)'&then
&&&&ClientLogout();
&&&&TimerAutoConnect.Enabled:=F
&&&&Login();
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.ClientLogin();
&&ThreadId:DWORD;
&&if&CheckPOP3ThreadHandle=0&then&CheckPOP3ThreadHandle&:=&CreateThread(nil,&0,&@CheckPOP3Thread,&nil,&0,&ThreadId);
&&LblMailCount.Enabled:=T
&&TimerAutoConnect.Enabled:=F
&&TimerLoging.Enabled:=F
&&PBLogin.Visible:=F
&&LblLoging.Visible:=F
&&LblCancelLogin.Visible:=F
&&TrevUserList.S
&&if&MAutoLeave.Checked&or&MAutoBusy.Checked&then
&&&&STimer.Enabled:=T
&&&&Snoop:=0;
&&ConnectedTicket&&&&&&&:=GetTickC
&&MConnect.Enabled&&&&&&:=F
&&MConnect.Caption&&&&&&:='登录(&I)';
&&MConnectSet.Enabled&&&:=T
&&MDisconnect.Enabled&&&:=T
&&MMyState.Enabled&&&&&&:=T
&&MDownUPGroup.Enabled:=
&&MSendMsg.Enabled&&&&&&:=T
&&MSendFile.Enabled&&&&&:=T
&&MSendVoice.Enabled&&&&:=T
&&MSendVideo.Enabled&&&&:=T
&&MShowHistory.Enabled&&:=T
&&//MChangeNameAndPassword.Enabled&:=T
&&NR1.Enabled&&&&&&&&&&&:=T
&&NR2.Enabled&&&&&&&&&&&:=T
&&NR3.Enabled&&&&&&&&&&&:=T
&&NR4.Enabled&&&&&&&&&&&:=T
&&NR5.Enabled&&&&&&&&&&&:=T
&&HartTimer.Enabled&&&&&:=T
&&KeepP2PSessionTimer.Enabled:=T
&&LastReturnHartTick&&&&:=GetTickC
&&&//GetListViewData2(TrevUserList,vsGroup);
&&&GetListViewData(TrevUserList,vsTree);
&&if&Me&&nil&then
&&&&UpDateMyS
&&&&CoolTrayIcon.ShowBalloonHint('登录成功','您好:'+Me.Name+#13+'您已登录至&'+Application.Title+'&服务器!',bitInfo,10);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.ClientLogout();
&&EmployeePointer:PE
&&ChatingForm:TChatingF
&&AudioHandShake:TAudioHandS
&&VideoHandShake:TVideoHandS
&&TransmitFile:TTransmitF
&&MySocket:TMyS
&&if&ClientTCP.Connected&then
&&&&ClientTCP.OnDisconnected:=
&&&&ClientTCP.D
&&if&CheckPOP3ThreadHandle&&0&then&TerminateThread(CheckPOP3ThreadHandle,4);
&&CheckPOP3ThreadHandle:=0;
&&LblMailCount.Caption:='0&封电子邮件';
&&LblMailCount.Enabled:=F
&&TimerAutoConnect.Enabled:=F
&&TimerLoging.Enabled:=F
&&KeepP2PSessionTimer.Enabled:=F
&&PBLogin.Visible:=F
&&LblLoging.Visible:=F
&&LblCancelLogin.Visible:=F
&&CoolTrayIcon.CycleIcons:=F
&&MsgAlertQueue.C
&&TrevUserList.H
&&STimer.Enabled:=F
&&MConnect.Enabled&&&&&&:=T
&&MConnect.Caption&&&&&&:='登录(&I)';
&&MConnectSet.Enabled&&&:=T
&&MDisconnect.Enabled&&&:=F
&&MMyState.Enabled&&&&&&:=F
&&MSendMsg.Enabled&&&&&&:=F
&&MSendFile.Enabled&&&&&:=F
&&MSendVoice.Enabled&&&&:=F
&&MSendVideo.Enabled&&&&:=F
&&MShowHistory.Enabled&&:=F
&&MChangeNameAndPassword.Enabled:=F
&&NR1.Enabled&&&&&&&&&&&:=F
&&NR2.Enabled&&&&&&&&&&&:=F
&&NR3.Enabled&&&&&&&&&&&:=F
&&NR4.Enabled&&&&&&&&&&&:=F
&&NR5.Enabled&&&&&&&&&&&:=F
&&HartTimer.Enabled&&&&&:=F
&&for&iLoop:=ChatingFormList.Count&-1&downto&0&&do
&&&&&&ChatingForm:=ChatingFormList.Items[iLoop];
&&&&&&ChatingFormList.Remove(ChatingForm);
&&&&&&&&if&(ChatingForm&is&TChatingForm)&then&ChatingForm.F
&&&&&&except
&&with&VideoHandShakes.LockList&do
&&&&for&iLoop:=Count-1&downto&0&do
&&&&&&VideoHandShake:=Items[iLoop];
&&&&&&VideoHandShake.F
&&&&&&VideoHandShakes.Remove(VideoHandShake);
&&&&VideoHandShakes.UnlockL
&with&AudioHandShakes.LockList&do
&&&&for&iLoop:=Count-1&downto&0&do
&&&&&&AudioHandShake:=Items[iLoop];
&&&&&&AudioHandShake.F
&&&&&&AudioHandShakes.Remove(AudioHandShake);
&&&&AudioHandShakes.UnlockL
&&with&TransmitFiles.LockList&do
&&&&for&iLoop:=Count-1&downto&0&do
&&&&&&TransmitFile:=Items[iLoop];
&&&&&&TransmitFile.F
&&&&&&TransmitFiles.Remove(TransmitFile);
&&&&TransmitFiles.UnlockL
&&with&Employees.LockList&do
&&&&for&iLoop:=0&to&Count-1&do
&&&&&&EmployeePointer:=Items[iLoop];
&&&&&&EmployeePointer.State:='断开';
&&&&&&EmployeePointer.HaveAudioDevice:=F
&&&&&&EmployeePointer.HaveVideoDevice:=F
&&&&&&UpdateListViewStates(TrevUserList,EmployeePointer.Node);&{更新用户状态}
&&&&&&FreeMem(EmployeePointer,SizeOf(Employee));
&&&&Employees.UnlockL
&&Employees.C
&&with&Branchs.LockList&do
&&&&for&iLoop:=0&to&Count-1&do&FreeMem(Items[iLoop],SizeOf(Branch));&&&&
&&&&Branchs.UnlockL
&&Branchs.C
&&UpDateMyState();
&&TrevUserList.Items.C
&&if&not&DontAutoConnect&then
&&&&&&TimerAutoConnect.Interval:=AutoConnectInterval*1000;
&&&&&&TimerAutoConnect.Enabled:=T
&&with&MySockets.LockList&do
&&&&for&iLoop:=Count-1&downto&0&do
&&&&&&&&MySocket:=Items[iLoop];
&&&&&&&&MySocket.F
&&&&&&&&MySocket:=
&&&&&&except
&&&&MySockets.UnLockL
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.SendI
&&LoginTime:I
&&CBLogin:TCBL
&&Buffer:Array[1..2048]of&
&&StrHttpProxySend,StrHttpProxyRecive:S
&&if&ClientTCP.Connected=False&then
&&&&if&inet_addr(PChar(HostIP))=INADDR_NONE&then
&&&&&&ClientTCP.Host:=HostName
&&&&&&ClientTCP.Host:=HostIP;
&&&&ClientTCP.Port:=ServerP
&&&&&&MConnect.Caption:='取消登录(&I)';
&&&&&&Gauge.Progress:=0;
&&&&&&PBLogin.Visible:=T
&&&&&&LblLoging.Caption:='正在连接...';
&&&&&&LblLoging.Visible:=T
&&&&&&LblCancelLogin.Visible:=T
&&&&&&if&ProxyCategory&&pcHTTP&then
&&&&&&begin
&&&&&&&&IdSocksInfo1.Version:=TSocksVersion(ProxyCategory);
&&&&&&&&IdSocksInfo1.Host:=ProxyA
&&&&&&&&IdSocksInfo1.Port:=ProxyP
&&&&&&&&if&ProxyUsername=''&then
&&&&&&&&begin
&&&&&&&&&&IdSocksInfo1.Authentication:=saNoA
&&&&&&&&end
&&&&&&&&else
&&&&&&&&begin
&&&&&&&&&&IdSocksInfo1.Authentication:=saUsernameP
&&&&&&&&&&IdSocksInfo1.Username:=ProxyU
&&&&&&&&&&IdSocksInfo1.Password:=ProxyP
&&&&&&&&LoginTime:=0;
&&&&&&&&while&LoginTime&3&do
&&&&&&&&try
&&&&&&&&&&ClientTCP.Connect(8000);
&&&&&&&&&&B
&&&&&&&&except
&&&&&&&&&&Inc(LoginTime);
&&&&&&else
&&&&&&begin
&&&&&&&&//通过HTTP登陆
&&&&&&&&IdSocksInfo1.Version:=svNoS
&&&&&&&&StrHttpProxySend:=Format('CONNECT&%s:%d&HTTP/1.0'#$d#$a#$d#$a&+&&&&'Host&%s'#$d#$a,&[ClientTCP.Host,&ClientTCP.Port,&ClientTCP.Host]);
&&&&&&&&ClientTCP.Host:=ProxyA
&&&&&&&&ClientTCP.Port:=ProxyP
&&&&&&&&ClientTCP.Connect(8000);
&&&&&&&&ClientTCP.Write(StrHttpProxySend);
&&&&&&&&StrHttpProxyRecive:=ClientTCP.ReadLn;//(EOL);
&&&&&&&&ClientTCP.ReadLn;
&&&&&&&&ClientTCP.ReadLn;
&&&&&&&&if&Copy(StrHttpProxyRecive,&1,&12)&&&&'HTTP/1.0&200'&then&ClientTCP.D
&&&&except
&&&&if&not&ClientTCP.Connected&then
&&&&&&ClientL
&&&&&&CoolTrayIcon.ShowBalloonHint('连接失败','未能连接至服务器,请检查网络设置!',bitError,10);
&&&&ClientHandleThread&:=&TClientHandleThread.C
&&&&ClientHandleThread.FreeOnTerminate:=T
&&&&ClientHandleThread.R
&&CBLogin.LoginName:=LoginN
&&CBLogin.Password:=P
&&CBLogin.State:=LoginS
&&CBLogin.LocalIP:=GetHostIP('');
&&CBLogin.LocalPort:=ClientTCP.Socket.Binding.P
&&CBLogin.HaveAudioDevice:=HaveAudioD
&&CBLogin.HaveVideoDevice:=HaveVideoD
&&CBLogin.MACNO:=MACNO;
&&CBLogin.Version:=40000;
&&Buffer[1]:=skL
&&CopyMemory(@Buffer[2],@CBLogin,SizeOf(CBLogin));
&&ClientTCP.Socket.Send(Buffer,SizeOf(CBLogin)+1);
&&LblMyState.Caption:='正在登录...';
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.GetInit();
&&TempReg:TR
&&ID:=LoginN
&&TempReg:=TRegistry.C
&&&&&&TempReg.RootKey:=HKEY_LOCAL_MACHINE;
&&&&&&if&TempReg.OpenKey(AppKey+''+ID+'Init',&True)&then
&&&&&&begin
&&&&&&&&if&trim(TempReg.ReadString('ViewStyle'))=''&then&&&
&&&&&&&&&&&&TempReg.WriteString('ViewStyle','Tree');
&&&&&&&&if&trim(TempReg.ReadString('HiddenState'))=''&then&
&&&&&&&&&&&&TempReg.WriteString('HiddenState','0');
&&&&&&&&if&trim(TempReg.ReadString('AutoLeave'))=''&then&&&
&&&&&&&&&&&&TempReg.WriteString('AutoLeave','1');
&&&&&&&&if&trim(TempReg.ReadString('AutoBusy'))=''&then
&&&&&&&&&&&&TempReg.WriteString('AutoBusy','1');
&&&&&&&&if&StrToInt(TempReg.ReadString('AutoLeave'))=0&then&&MAutoLeave.Checked:=F
&&&&&&&&if&StrToInt(TempReg.ReadString('AutoBusy'))=0&&then&&MAutoBusy.Checked:=F
&&&&&&&&if&TempReg.ReadString('CustomColor')&&''&then
&&&&&&&&begin
&&&&&&&&&&EndColor:=TColor(StrToInt(TempReg.ReadString('CustomColor')));
&&&&&&&&&&ChangeAllColor(EndColor);
&&&&&&&&end
&&&&&&&&else&begin
&&&&&&&&&&EndColor:=TColor();
&&&&&&&&&&ChangeAllColor(EndColor);
&&&&&&&&if&TempReg.ReadString('POP3Server')&&''&then
&&&&&&&&begin
&&&&&&&&&&ClientPOP3.Host&&&&&&&&&&&&:=&TempReg.ReadString('POP3Server');
&&&&&&&&&&ClientPOP3.Port&&&&&&&&&&&&:=&StrToInt(TempReg.ReadString('POP3Port'));
&&&&&&&&&&ClientPOP3.Username&&&&&&&&:=&TempReg.ReadString('POP3User');
&&&&&&&&&&ClientPOP3.Password&&&&&&&&:=&DESryStrHex(TempReg.ReadString('POP3Pass'),DESKEY);
&&&&&&&&end
&&&&&&&&else
&&&&&&&&begin
&&&&&&&&&&LblMailCount.Caption:='点击设置您的邮箱';
&&&&TempReg.F
{------------------------------------------------------------------------------}
{选择了树型方式查看部门及用户列表}
procedure&TRealMessengerX.MTreeClick(Sender:&TObject);
&&TempReg:TR
&&TempReg:=TRegistry.C
&&&&TempReg.RootKey:=HKEY_LOCAL_MACHINE;
&&&&if&TempReg.OpenKey(AppKey+''+LoginName+'Init',&True)&then&&TempReg.WriteString('ViewStyle','Tree');
&&&&TempReg.F
&&GetListViewData2(TrevUserList,vsTree);
{------------------------------------------------------------------------------}
{选择了联机/脱机方式查看部门及用户列表}
procedure&TRealMessengerX.MOnOrOffClick(Sender:&TObject);
&&TempReg:TR
&&TempReg:=TRegistry.C
&&&&TempReg.RootKey:=HKEY_LOCAL_MACHINE;
&&&&if&TempReg.OpenKey(AppKey+''+LoginName+'Init',&True)&then&&TempReg.WriteString('ViewStyle','OnOrOff');
&&&&TempReg.F
&&GetListViewData2(TrevUserList,vsOnlineOffline);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.MGroupClick(Sender:&TObject);
&&TempReg:TR
&&TempReg:=TRegistry.C
&&&&TempReg.RootKey:=HKEY_LOCAL_MACHINE;
&&&&if&TempReg.OpenKey(AppKey+''+LoginName+'Init',&True)&then&&TempReg.WriteString('ViewStyle','Group');
&&&&TempReg.F
&&GetListViewData2(TrevUserList,vsGroup);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.ChangeMyState(State:&SIsAutoState:Boolean=False);
&&CBStateChanged:TCBStateC
&&Buffer:Array[1..2048]of&
&&CBStateChanged.ID&&&&&:=Me.ID;
&&CBStateChanged.State&&:=S
&&CBStateChanged.HaveAudioDevice:=HaveAudioD
&&CBStateChanged.HaveVideoDevice:=HaveVideoD
&&CBStateChanged.IsAutoState:=IsAutoS
&&Buffer[1]:=skStateC
&&CopyMemory(@Buffer[2],@CBStateChanged,SizeOf(CBStateChanged));
&&&&ClientTCP.WriteBuffer(Buffer,SizeOf(CBStateChanged)+1,True);
&&&&MessageBox(Handle,'更改状态失败!','错误',MB_ICONERROR);
&&&&ClientL
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.MOfflineClick(Sender:&TObject);
&&&&ChangeMyState(Copy(Trim((Sender&as&TMenuItem).Caption),1,Length(Trim((Sender&as&TMenuItem).Caption))-4));
{------------------------------------------------------------------------------}
{用户要自己输入状态值}
procedure&TRealMessengerX.MOtherClick(Sender:&TObject);
&&InputState:
&&InputState:=&Trim(ShowMyInputBox('输入',&'您要将当前的状态更改为:',&'',20));
&&if&Length(InputState)&0&then
&&&&ChangeMyState(InputState);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.FlashTray(ChatingForm:TChatingForm);
&&if&ChatingForm.Visible&then&
&&if&ChatingForm.Pushed&then&
&&ChatingForm.Pushed:=T
&&MsgAlertQueue.Add(ChatingForm);
&&CoolTrayIcon.IconList:=ImgLstMsgA
&&CoolTrayIcon.CycleIcons:=T
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.ShowImage(PHandle:HWND;BitMap:HBitMBuf:&PByte);
&&procedure&SetImage(hBitmap:&THandle);
&&&&SendMessage(BitMap,&STM_SETIMAGE,&IMAGE_BITMAP,&Integer(hBitmap));
&&pData:&P
&&pDC,&MemDC:&TH
&&hBitmap:&TH
&&pDC&:=&GetDC(PHandle);
&&pData&:=&
&&hBitmap&:=&CreateDIBSection(0,&A_FOutInfo,&DIB_RGB_COLORS,&pData,&0,&0);
&&if&not&Assigned(pData)&and&(hBitmap&=&0)&then
&&pData&:=&B
&&SetImage(hBitmap);
&&MemDC&:=&CreateCompatibleDC(pDC);
&&SelectObject(MemDC,&hBitmap);
&&BitBlt(pDC,&0,&0,&A_FOutInfo.bmiHeader.biWidth,&A_FOutInfo.bmiHeader.biHeight,
&&&&MemDC,&0,&0,&SRCCOPY);
&&DeleteDC(MemDC);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.MDisconnectClick(Sender:&TObject);
&&ClientLogout();
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.ApplicationEvents1Exception(Sender:&TO
&&E:&Exception);
&&//ShowMessage(E.Message);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.LblMyStateClick(Sender:&TObject);
&&Point:TP
&&if&Me=nil&then&
&&if&AnsiSameText(Me.State,'断开')&then&
&&Point.X:=0;
&&Point.Y:=LblMyState.H
&&PpMenuStates.Popup(LblMyState.ClientToScreen(Point).X-18,LblMyState.ClientToScreen(Point).Y+2);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.HartTimerTimer(Sender:&TObject);
&&if&ClientTCP.Connected=False&then&E
&&&&ClientTCP.WriteBuffer(skOnlineCheck,1,True);
&&&&ClientLogout();
&&if&GetTickCount-LastReturnHartTick&HartTimer.Interval*5&then
&&&&ClientLogout();
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.TrevUserListMouseDown(Sender:&TO
&&Button:&TMouseB&Shift:&TShiftS&X,&Y:&Integer);
&&TreeNode:TTreeN
&&Point:TP
&&TreeNode:=TrevUserList.GetNodeAt(X,Y);
&&if&TreeNode=nil&then
&&&&TreeNode.Selected:=F
&&&&TreeNode.Selected:=T
&&if&(Button=mbRight)&then
&&&&Point.X:=X;
&&&&Point.Y:=Y;
&&&//&&&if&(TreeNode.StateIndex=2)&then
&&&&&&&&PpMenuRight.Popup(TrevUserList.ClientToScreen(Point).X,TrevUserList.ClientToScreen(Point).Y);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.TrevUserListChange(Sender:&TO
&&Node:&TTreeNode);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.MAutoLeaveClick(Sender:&TObject);
&&TempReg:TR
&&TempReg:=TRegistry.C
&&&&TempReg.RootKey:=HKEY_LOCAL_MACHINE;
&&&&if&TempReg.OpenKey(AppKey+''+LoginName+'Init',&True)&then
&&&&if&MAutoLeave.Checked&then
&&&&&&TempReg.WriteString('AutoLeave','1');
&&&&&&if&STimer.Enabled=false&then
&&&&&&begin
&&&&&&&&STimer.Enabled:=T
&&&&&&&&Snoop:=0;
&&&&&&TempReg.WriteString('AutoLeave','0')
&&&&TempReg.F
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.MAutoBusyClick(Sender:&TObject);
&&TempReg:TR
&&TempReg:=TRegistry.C
&&&&TempReg.RootKey:=HKEY_LOCAL_MACHINE;
&&&&if&TempReg.OpenKey(AppKey+''+LoginName+'Init',&True)&then
&&&&if&MAutoLeave.Checked&then
&&&&&&TempReg.WriteString('AutoBusy','1');
&&&&&&if&STimer.Enabled=false&then
&&&&&&begin
&&&&&&&&STimer.Enabled:=T
&&&&&&&&Snoop:=0;
&&&&&&TempReg.WriteString('AutoBusy','0')
&&&&TempReg.F
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.TrevUserListDblClick(Sender:&TObject);
&&ChatingForm:&TChatingF
&&Room:ChatR
&&if&TrevUserList.Selected.StateIndex&&&&2&then&E
&&if&PEmployee(TrevUserList.Selected.Data).ID&=&Me.ID&then
&&&&MessageBox(Handle,'不能与您自己对话!','提示',MB_ICONINFORMATION);
&&Room.UserCount:=2;
&&Room.Users[1]&:=Me.ID;
&&Room.Users[2]&:=PEmployee(TrevUserList.Selected.Data).ID;
&&ChatingForm:=OpenChatingForm(Room);
&&ChatingForm.LBIP.Caption:='IP:'+PEmployee(TrevUserList.Selected.Data).IP&+':'+inttostr(PEmployee(TrevUserList.Selected.Data).Port);
&&MsgAlertQueue.Remove(ChatingForm);
&&if&MsgAlertQueue.Count=0&then
&&&&&&&&CoolTrayIcon.CycleIcons:=F
&&&&&&&&CoolTrayIcon.IconList:=
&&&&&&&&ChangeLblMyStateCaption();
&&ChatingForm.Pushed:=T
&&ChatingForm.S
&&ShowWindow(ChatingForm.Handle,SW_SHOW);
&&if&ChatingForm.WindowState&=&wsMinimized&then&showWindow(ChatingForm.Handle,SW_RESTORE);
&&if&ChatingForm.CanFocus&then&ChatingForm.SetF
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.NR2Click(Sender:&TObject);
&&ChatingForm:&TChatingF
&&Room:ChatR
&&if&TrevUserList.Selected.StateIndex&&&&2&then&E
&&if&PEmployee(TrevUserList.Selected.Data).ID&=&Me.ID&then
&&&&MessageBox(Handle,'不能给您自己发送文件!','提示',MB_ICONINFORMATION);
&&Room.UserCount:=2;
&&Room.Users[1]&:=Me.ID;
&&Room.Users[2]&:=PEmployee(TrevUserList.Selected.Data).ID;
&&ChatingForm:=OpenChatingForm(Room);
&&ChatingForm.S
&&if&ChatingForm.WindowState&=&wsMinimized&then&showWindow(ChatingForm.Handle,SW_RESTORE);
&&if&ChatingForm.CanFocus&then&ChatingForm.SetF
&&ChatingForm.ImgSendFileClick(nil);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.NR3Click(Sender:&TObject);
&&ChatingForm:&TChatingF
&&Room:ChatR
&&if&TrevUserList.Selected.StateIndex&&&&2&then&E
&&if&PEmployee(TrevUserList.Selected.Data).ID&=&Me.ID&then
&&&&MessageBox(Handle,'不能与您自己进行音频对话!','提示',MB_ICONINFORMATION);
&&Room.UserCount:=2;
&&Room.Users[1]&:=Me.ID;
&&Room.Users[2]&:=PEmployee(TrevUserList.Selected.Data).ID;
&&ChatingForm:=OpenChatingForm(Room);
&&ChatingForm.S
&&if&ChatingForm.WindowState&=&wsMinimized&then&showWindow(ChatingForm.Handle,SW_RESTORE);
&&if&ChatingForm.CanFocus&then&ChatingForm.SetF
&&ChatingForm.ImgVoiceClick(nil);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.NR4Click(Sender:&TObject);
&&ChatingForm:&TChatingF
&&Room:ChatR
&&if&TrevUserList.Selected.StateIndex&&&&2&then&E
&&if&PEmployee(TrevUserList.Selected.Data).ID&=&Me.ID&then
&&&&MessageBox(Handle,'不能与您自己进行视频对话!','提示',MB_ICONINFORMATION);
&&Room.UserCount:=2;
&&Room.Users[1]&:=Me.ID;
&&Room.Users[2]&:=PEmployee(TrevUserList.Selected.Data).ID;
&&ChatingForm:=OpenChatingForm(Room);
&&ChatingForm.S
&&if&ChatingForm.WindowState&=&wsMinimized&then&showWindow(ChatingForm.Handle,SW_RESTORE);
&&if&ChatingForm.CanFocus&then&ChatingForm.SetF
&&ChatingForm.ImgVideoClick(nil);
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.CoolTrayIconDblClick(Sender:&TObject);
&&ChatingForm:TChatingF
&&&&if&MsgAlertQueue.Count&0&then
&&&&&&ChatingForm:=MsgAlertQueue.Items[0];
&&&&&&MsgAlertQueue.Remove(ChatingForm);
&&&&&&if&ChatingForm&&nil&then
&&&&&&begin
&&&&&&&&ChatingForm.S
&&&&&&&&ShowWindow(ChatingForm.Handle,SW_SHOW);
&&&&&&&&if&ChatingForm.WindowState=wsMinimized&then&ChatingForm.WindowState:=wsN&
&&&&&&&&SetForegroundWindow(ChatingForm.Handle);
&&&&&&if&MsgAlertQueue.Count=0&then
&&&&&&begin
&&&&&&&&CoolTrayIcon.CycleIcons:=F
&&&&&&&&CoolTrayIcon.IconList:=
&&&&&&&&ChangeLblMyStateCaption();
&&&&&&&&ShowWindow(Handle,SW_SHOW);
&&&&&&&&RealMessengerX.CoolTrayIcon.ShowTaskbarI
&&&&&&&&jfForceForeGroundWindow(Handle);
&&&&&&finally
&&&&&&&&MOpen.Visible:=F
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.NR5Click(Sender:&TObject);
&&if&TrevUserList.Selected.StateIndex&&&&2&then&E
&&if&PEmployee(TrevUserList.Selected.Data).ID&=&Me.ID&then
&&&&MessageBox(Handle,'不存在与您自己的对话记录!','提示',MB_ICONINFORMATION);
&&if&HistoryForm&&nil&then&HistoryForm.C&
&&HistoryForm:=THistoryForm.Create(Application);
&&HistoryForm.ID:=PEmployee(TrevUserList.Selected.Data).ID;
&&HistoryForm.Name:=PEmployee(TrevUserList.Selected.Data).N
&&HistoryForm.S
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.TrevUserListMouseMove(Sender:&TO
&&Shift:&TShiftS&X,&Y:&Integer);
&&Node:TTreeN
&&Node:=TrevUserList.GetNodeAt&(X,Y);
&&if&Node=nil&then
&&&&Application.CancelH
&&if&(Node.StateIndex&&1)&and&(Node.StateIndex&&2)&&then
&&&&Application.CancelH
&&if&Node=CurNode&then
&&p.x:=Node.DisplayRect(True).Left+TrevUserList.Canvas.TextWidth(Node.Text)+5;
&&P.y:=Node.DisplayRect(True).Top+PnlRoot.T
&&if&Node.StateIndex=2&then
&&&&TrevUserList.Hint&:=Node.Text+#13+PEmployee(Node.data)^.ToolTips
&&&&Application.CancelH
&&Application.ActivateHint(Point(clienttoscreen(p).x,clienttoscreen(p).y));
&&CurNode:=N
{------------------------------------------------------------------------------}
procedure&TRealMessengerX.STimerTimer(Sender:&TObject);
&&Point:TP
&&Text:&array&[0..255]&of&
&&if&TrevUserList.Visible=False&then&
&&&&Snoop:=Snoop+STimer.I
&&&&GetCursorPos(Point);
&&&&if&(OldMousePoint.X&&Point.X)&or&(OldMousePoint.Y&&Point.Y)&then
&&&&&&Snoop:=0;
&&&&&&OldMousePoint.X:=Point.X;
&&&&&&OldMousePoint.Y:=Point.Y;
&&&&if&(Snoop&300000)&and&MAutoLeave.Checked&&then&&//5&分钟之内没有动作
&&&&&&if&AnsiSameText(Me.State,'联机')&then
&&&&&&begin
&&&&&&&&ChangeMyState('离开',True);
&&&&else&if&IsAutoState&and&AnsiSameText(Me.State,'离开')&then&
&&&&&&ChangeMyState('联机');
&&&&GetClassName(GetForegroundWindow,@Text,256);
&&&&if&(not&AnsiSameText(StrPas(Text),'WorkerW'))&and&(not&AnsiSameText(StrPas(Text),'Progman'))&then
&&&&&&GetWindowRect(GetForegroundWindow,&Rct);
&&&&&&IntersectRect(Rct,&Rct,&Screen.DesktopRect);
&&&&&&if&EqualRect(Rct,&Screen.DesktopRect)&then&//正在运行全屏程序
&&&&&&begin
&&&&&&&&if&AnsiSameText(Me.State,'联机')&and&(MAutoBusy.Checked)&and&(CopyScreenForm=nil)&then
&&&&&&&&begin
&&&&&&&&&&ChangeMyState('忙碌',True);
&&&&&&&&&&
&&&&&&else&if&IsAutoState&and&AnsiSameText(Me.State,'忙碌')&then&
&&&&&&begin
&&&&&&&&ChangeMyState('联机');
CopyRight & 2008- All Rights reserved.&&苏ICP备

我要回帖

更多关于 device offline 的文章

 

随机推荐