//--------------------------------------------------------------------------- #include <vcl.h>#pragma hdrstop #include "Chat.h"#include "Unit2.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma link "AgentObjects_OCX"#pragma link "SUISkinEngine"#pragma link "trayicon"#pragma resource "*.dfm"TForm1 *Form1;IAgentCtlCharacterEx* Merlin;String IP;//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){Name=m_sName;m_sHostAddress="169.254.237.0";ClientSocket1->Active=true;/*hostent *p;char s[128];gethostname(s,128);//获取指定计算机的名字p=gethostbyname(s);String HostIP=inet_ntoa(*((in_addr*)p->h_addr)); //获取指定计算机的IP地址if(p!=NULL)delete p; *///m_sHostAddress=IP;ClientSocket1->Address=m_sHostAddress;ClientSocket1->Port=50;m_sIsName="NA";m_sIsChat="CT";m_sSpeakTo="ALL";m_sPart="#";m_HasConnected=false;char tmp[100];GetWindowsDirectory(tmp,100);String tmppath=String(tmp)+"//msagent//chars//Genie.acs";BSTR Agentname = BSTR("Genie"); //将String 类型转变为 wchar_t*Variant Agentpath = Variant(tmppath); //将tmppath 类型转变为tagVARIANTAgent1->Characters->Load(Agentname,Agentpath);Merlin = (IAgentCtlCharacterEx*)Agent1->Characters->Character(Agentname);}//---------------------------------------------------------------------------AnsiString __fastcall TForm1::GetLocalHostIP() { hostent *p; char s[128]; gethostname(s,128);//获取指定计算机的名字 p=gethostbyname(s); AnsiString HostIP=inet_ntoa(*((in_addr *)p->h_addr)); //获取指定计算机的IP地址 if(p!=NULL) delete p; //p=NULL; return HostIP; } //-----------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender){IP=GetLocalHostIP();TDateTime NowTime;NowTime=Now();Bar->Panels->Items[1]->Text=NowTime.DateTimeString();Label1->Caption="欢迎登录YYB聊天区";Edit2->Text=IP;RadioButton1->Checked=true;}//---------------------------------------------------------------------------void __fastcall TForm1::ClientSocket1Connecting(TObject *Sender, TCustomWinSocket *Socket){Bar->Panels->Items[0]->Text="正在连接的....."; }//---------------------------------------------------------------------------void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender, TCustomWinSocket *Socket){Bar->Panels->Items[1]->Text="服务器已断开连接...";ListUser->Items->Clear();m_HasConnected=false;}//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){InputQuery("请输入你的用户名","用户名:",m_sName);if(m_sName.IsEmpty()){ShowMessage("你将使用默认名--YYB登录");m_sName="YYB";}if(ClientSocket1->Active==false)ClientSocket1->Open(); }//---------------------------------------------------------------------------void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket){String sInfo,sType,sChat;sInfo=Socket->ReceiveText();sType=sInfo.SubString(1,2);if(sInfo==String("CLEAR"))ListUser->Items->Clear();else{if(sType!=m_sIsChat){if(sInfo!=m_sName)Label1->Caption="新朋友来了!";ListUser->Items->Add(sInfo);}else{sChat=sInfo.SubString(4,sInfo.Length()-3);TVariant vText= sChat;TVariant vUrl= "";Media->FileName=GetCurrentDir()+"//Sound//Msg.wav";Media->Open();Media->Play();Merlin->Play(WideString("Announce"));Merlin->Speak(vText,vUrl);}}}//---------------------------------------------------------------------------void __fastcall TForm1::ClientSocket1Error(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode){ErrorCode=0; }//---------------------------------------------------------------------------void __fastcall TForm1::ListUserClick(TObject *Sender){if(m_HasConnected){String sTemp;if(m_sName==ListUser->Items->Strings[ListUser->ItemIndex]){ShowMessage("自己跟自己说!");}else{sTemp.sprintf("%s对%s说...",m_sName,ListUser->Items->Strings[ListUser->ItemIndex]);m_sSpeakTo=ListUser->Items->Strings[ListUser->ItemIndex];Label1->Caption=sTemp;}ChatForm->Show();//AnimateWindow(Form1->Handle,2000,AW_HIDE|AW_SLIDE|AW_HOR_POSITIVE|AW_VER_POSITIVE);Form1->Hide();}elseShowMessage("对不起,请先登录!");Merlin->Show(Variant(0));Merlin->MoveTo(100,100,Variant(2));Merlin->Play(WideString("Search"));Merlin->Play(WideString("Congratulate"));Merlin->Play(WideString("Wave"));TVariant vText= "欢迎来到YYB世界!这里你将感受到YYB带给你的全新的视觉体验!";TVariant vUrl= "";Merlin->Speak(vText,vUrl);}//---------------------------------------------------------------------------void __fastcall TForm1::ClientSocket1Connect(TObject *Sender, TCustomWinSocket *Socket){Socket->SendText(m_sIsName+m_sName);String sTemp;sTemp.sprintf("%s登录成功!",m_sName);ShowMessage(sTemp);Bar->Panels->Items[0]->Text=sTemp;//Label->m_HasConnected=true; }//---------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender){if(ClientSocket1->Socket->Connected)ClientSocket1->Socket->Close();Bar->Panels->Items[0]->Text=m_sName+"离开....";}//---------------------------------------------------------------------------void __fastcall TForm1::Edit2KeyDown(TObject *Sender, WORD &Key, TShiftState Shift){if(!Edit2->Text.IsEmpty()){m_sHostAddress=Edit2->Text;ClientSocket1->Address=m_sHostAddress;}}//---------------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender){Agent1->Characters->Release();Agent1->Characters->Unload(BSTR("Genie"));Close();}//---------------------------------------------------------------------------void __fastcall TForm1::ComboBox1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift){if(Key==VK_RETURN){int port=atoi(ComboBox1->Text.c_str());ComboBox1->Items->Add(String(port));ClientSocket1->Port=port;}}//---------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender){TDateTime NowTime;NowTime=Now();Bar->Panels->Items[1]->Text=NowTime.DateTimeString();}//--------------------------------------------------------------------------- void __fastcall TForm1::N2Click(TObject *Sender){Close(); }//--------------------------------------------------------------------------- void __fastcall TForm1::FormHide(TObject *Sender){AnimateWindow(Form1->Handle,2000,AW_HIDE|AW_SLIDE|AW_HOR_POSITIVE|AW_VER_POSITIVE); }//--------------------------------------------------------------------------- void __fastcall TForm1::FormShow(TObject *Sender){AnimateWindow(Form1->Handle,2000,AW_BLEND);}//--------------------------------------------------------------------------- void __fastcall TForm1::TrayIcon1Click(TObject *Sender){//Pop->}//---------------------------------------------------------------------------