📄 chat.cpp
字号:
//---------------------------------------------------------------------------
#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 类型转变为tagVARIANT
Agent1->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();
}
else
ShowMessage("对不起,请先登录!");
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->
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -