Files
AC_Pro/ShowUserInfoPanel.cpp
T
2026-06-13 00:05:19 +08:00

512 lines
15 KiB
C++

//---------------------------------------------------------------------------
#pragma hdrstop
#include "ShowUserInfoPanel.h"
#include "GlobalUnit.h"
#include "ImgCopperFormUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#define BORDER_COLOR TColor(RGB(100, 108, 119))
#define BK_COLOR TColor(RGB(39, 42, 47))
#define SEPARATOR_COLOR TColor(RGB(152, 154, 156))
#define FONT_COLOR TColor(RGB(152, 154, 156))
#define FONT_COLOR_HI TColor(RGB(255, 255, 255))
#define VIPHEIGHT 24
#define SHOWHEIGHT 190
//---------------------------------------------------------------------------
const static String LabelStr[] = {
L"唱作音符数",
L"魅力值",
L"粉丝数",
L"歌曲数",
L"空间未读消息",
L"注销",
L"个人空间"
};
const static TPoint FrameRoute[] = {
TPoint(0, 5),
TPoint(225, 5),
TPoint(230, 0),
TPoint(235, 5),
TPoint(250, 5),
TPoint(250, SHOWHEIGHT),
TPoint(0, SHOWHEIGHT)
};
const static String ResStr[] = {
L"UserInfo_Coin",
L"UserInfo_Pops",
L"UserInfo_Fans",
L"UserInfo_Music",
L"UserInfo_Zone",
L"UserInfo_Icon",
};
//---------------------------------------------------------------------------
__fastcall TShowUserInfo::TShowUserInfo(TComponent *Owner)
: TWinControl(Owner)
{
Parent = Application->MainForm;
ApplicationEvents = new TApplicationEvents(Application->MainForm);
ApplicationEvents->OnMessage = DoHandleMessage;
// FBalance = 0;
// FPops = 0;
// FFans = 0;
// FSongs = 0;
m_ImageList = new TList();
m_ValueList = new TList();
TLabel *Label = new TLabel(this);
//Label->Color =
Label->Transparent = true;
Label->Top = 102;//+VIPHEIGHT;
Label->Left = 50;// + 25;
Label->Width = 100;
Label->WordWrap = false;
Label->AutoSize = false;
Label->Font->Color = FONT_COLOR;
Label->Font->Size = g_szFont10;
Label->Alignment = taCenter;
Label->Caption = "";
Label->Parent = this;
Label->ShowHint = true;
Label->EllipsisPosition = epEndEllipsis;
Label->OnMouseEnter = DoLabelMouseEnter;
Label->OnMouseLeave = DoLabelMouseLeave;
Label->Cursor = crHandPoint;
Label->OnClick = DoObjectClick;
m_ValueList->Add(Label);
TPngImage *pngImage = new TPngImage();
pngImage->LoadFromResourceName(int(HInstance), ResStr[5]);
m_UserIcon = new TImage(this);
m_UserIcon->Picture->Graphic = pngImage;
m_UserIcon->Width = 64;
m_UserIcon->Height = 64;
m_UserIcon->Left = 68;// + 25;
m_UserIcon->Top = 30;
m_UserIcon->ShowHint = true;
m_UserIcon->Hint = "";
m_UserIcon->Parent = this;
// m_UserIcon->AutoSize = false;
// m_UserIcon->Center = true;
m_UserIcon->Stretch = true;
m_UserIcon->Cursor = crHandPoint;
m_UserIcon->OnClick = DoObjectClick;
m_imgVip = new TImage(this);
m_imgVip->Width = 35;
m_imgVip->Height = VIPHEIGHT - 8;
m_imgVip->Top = 30 + 2; //m_UserIcon->Top+m_UserIcon->Height+10;
m_imgVip->Left = 132 + 15;//(Width-m_imgVip->Width)/2;
m_imgVip->Parent = this;
m_imgVip->OnClick = DoObjectClick;
m_imgVip->Stretch = true;
m_imgVip->Cursor = crHandPoint;
m_imgVip->ShowHint = true;
TPngImage *pImgVip = new TPngImage();
// m_imgVip->Visible = false;
if(-1==g_infoUser.accountInfo.vipPeriod){
pImgVip->LoadFromResourceName(int(HInstance), L"vipForever");
m_imgVip->Hint = L"终身VIP会员";
}else if( 0==g_infoUser.accountInfo.vipPeriod ) {
pImgVip->LoadFromResourceName(int(HInstance), L"vipNone");
m_imgVip->Hint = L"点击成为VIP会员\n成为VIP之后请重新登录";
}else {
pImgVip->LoadFromResourceName(int(HInstance), L"vipTimer");
String strDay = L"VIP权限剩余";
int nDay = g_infoUser.accountInfo.vipPeriod/(60*60*24);
int nAdd = g_infoUser.accountInfo.vipPeriod%(60*60*24)==0?0:1;
strDay += IntToStr(nDay+nAdd);
strDay += L"天\n点击延期,之后请重新登录";
m_imgVip->Hint = strDay;
}
m_imgVip->Picture->Assign(pImgVip);
SAFE_DELETE(pImgVip)
// for(int i = 0; i < 4; i++)
{
TPngImage *png = new TPngImage();
png->LoadFromResourceName(int(HInstance), ResStr[0]);
TImage *Image = new TImage(this);
Image->Picture->Graphic = png;
Image->Top = 60+16;//125+VIPHEIGHT;
Image->Left = 132 + 10;//23 + i * 60;
Image->Width = 20;
Image->Height = 16;
Image->Parent = this;
Image->Stretch = true;
Image->ShowHint = true;
Image->Hint = "唱作音符数\n点击充值兑换,之后请重新登录";
Image->Cursor = crHandPoint;
Image->OnClick = DoObjectClick;
m_ImageList->Add(Image);
Label = new TLabel(this);
Label->Transparent = true;
Label->Top = 60 +16;//155+VIPHEIGHT;
Label->Left = 132 + 30 + 2; //5 + i * 60;
Label->Width = 60;
Label->WordWrap = false;
Label->AutoSize = false;
Label->EllipsisPosition = epEndEllipsis;
Label->Font->Color = clYellow;
Label->Font->Name = g_strTxtFontName;
Label->Font->Size = g_szFont11;
Label->Alignment = taLeftJustify;
Label->Caption = IntToStr(g_infoUser.accountInfo.balance);
Label->Parent = this;
Label->OnMouseEnter = DoLabelMouseEnter;
Label->OnMouseLeave = DoLabelMouseLeave;
Label->Cursor = crHandPoint;
Label->OnClick = DoObjectClick;
Label->Hint = "唱作音符数\n点击充值兑换,之后请重新登录";
Label->ShowHint = true;
m_ValueList->Add(Label);
}
m_LogoutBtn = new TTextButton(this);
m_LogoutBtn->Width = 60;
m_LogoutBtn->Text = LabelStr[5];
m_LogoutBtn->Top = 125+VIPHEIGHT;
m_LogoutBtn->Left = 95;// + 25;
m_LogoutBtn->Parent = this;
m_LogoutBtn->ShowHint = true;
m_LogoutBtn->Hint = "退出登录";
m_LogoutBtn->FontSize = g_szFont9;
m_LogoutBtn->OnClick = DoObjectClick;
// m_ZoneBtn = new TTextButton(this);
// m_ZoneBtn->Width = 60;
// m_ZoneBtn->Text = LabelStr[6];
// m_ZoneBtn->Top = 190+VIPHEIGHT;
// m_ZoneBtn->Left = 105 + 25;
// m_ZoneBtn->Parent = this;
// m_ZoneBtn->FontSize = g_szFont9;
// m_ZoneBtn->OnClick = DoButtonClick;
SetTransparent( this );
}
//---------------------------------------------------------------------------
__fastcall TShowUserInfo::~TShowUserInfo()
{
if(m_ImageList){
m_ImageList->Clear();
delete m_ImageList;
m_ImageList = NULL;
}
if(m_ValueList){
m_ValueList->Clear();
delete m_ValueList;
m_ValueList = NULL;
}
if(m_LogoutBtn){
delete m_LogoutBtn;
m_LogoutBtn = NULL;
}
// if(m_ZoneBtn){
// delete m_ZoneBtn;
// m_ZoneBtn = NULL;
// }
if(ApplicationEvents){
delete ApplicationEvents;
ApplicationEvents = NULL;
}
if(m_imgVip){
delete m_imgVip;
m_imgVip = NULL;
}
}
//---------------------------------------------------------------------------
void __fastcall TShowUserInfo::CreateParams(TCreateParams &Params)
{
TWinControl::CreateParams(Params);
Params.Style = 0;
Params.Style = WS_POPUP;
}
//---------------------------------------------------------------------------
void __fastcall TShowUserInfo::CreateWnd()
{
Width = 250;
Height = SHOWHEIGHT;
TWinControl::CreateWnd();
HRGN hRgn;
hRgn = CreatePolygonRgn(FrameRoute,7, ALTERNATE);
SetWindowRgn(Handle, hRgn, true);
DeleteObject(hRgn);
}
//---------------------------------------------------------------------------
void __fastcall TShowUserInfo::DoObjectClick(TObject *Sender)
{
if(Sender == m_LogoutBtn)
m_ModalResult = 1;
else if(Sender == m_UserIcon || Sender == m_ValueList->Items[0])
m_ModalResult = 2;
else if(Sender == m_imgVip )
m_ModalResult = 3;
else if(Sender == m_ValueList->Items[1] || Sender==m_ImageList->Items[0])
m_ModalResult = 4;
Hide();
}
//---------------------------------------------------------------------------
void __fastcall TShowUserInfo::DoHandleMessage(MSG &Msg, bool &Handled)
{
if(Msg.message == WM_NCLBUTTONDOWN || Msg.message == WM_NCRBUTTONDOWN)
{
m_ModalResult = -1;
Hide();
}
if(Msg.message == WM_LBUTTONDOWN || Msg.message == WM_RBUTTONDOWN)
{
if(Msg.hwnd != Handle)
{
m_ModalResult = -1;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TShowUserInfo::DoLabelMouseEnter(TObject *Sender)
{
((TLabel *)Sender)->Font->Color = FONT_COLOR_HI;
((TLabel *)Sender)->Font->Style = TFontStyles()<<fsUnderline;
}
//---------------------------------------------------------------------------
void __fastcall TShowUserInfo::DoLabelMouseLeave(TObject *Sender)
{
((TLabel *)Sender)->Font->Color = FONT_COLOR;
((TLabel *)Sender)->Font->Style = TFontStyles();
}
//---------------------------------------------------------------------------
void __fastcall TShowUserInfo::SetUserName(String Value)
{
if(FUserName != Value) {
FUserName = Value;
((TLabel *)m_ValueList->Items[0])->Caption = Value;
String strHint = "用户名:";
strHint += g_infoUser.strUserName;
strHint += "\n昵 称:";
strHint += g_infoUser.strNickName;
strHint += "\n音符数:";
strHint += IntToStr(g_infoUser.accountInfo.balance);
strHint += "\n\n点击查看详情";
m_UserIcon->Hint = strHint;
((TLabel *)m_ValueList->Items[0])->Hint = strHint;
}
}
//---------------------------------------------------------------------------
//void __fastcall TShowUserInfo::SetBalance(int Value)
//{
// if(FBalance != Value) {
// FBalance = Value;
// ((TLabel *)m_ValueList->Items[1])->Caption = IntToStr(Value);
// }
//}
////---------------------------------------------------------------------------
//void __fastcall TShowUserInfo::SetPops(int Value)
//{
// if(FPops != Value) {
// FPops = Value;
// ((TLabel *)m_ValueList->Items[2])->Caption = IntToStr(Value);
// }
//}
////---------------------------------------------------------------------------
//void __fastcall TShowUserInfo::SetFans(int Value)
//{
// if(FFans != Value) {
// FFans = Value;
// ((TLabel *)m_ValueList->Items[3])->Caption = IntToStr(Value);
// }
//}
////---------------------------------------------------------------------------
//void __fastcall TShowUserInfo::SetSongs(int Value)
//{
// if(FSongs != Value) {
// FSongs = Value;
// ((TLabel *)m_ValueList->Items[4])->Caption = IntToStr(Value);
// }
//}
////---------------------------------------------------------------------------
//void __fastcall TShowUserInfo::SetZones(int Value)
//{
// if(FZones != Value){
// FZones = Value;
// ((TLabel *)m_ValueList->Items[5])->Caption = IntToStr(Value);
// }
//}
////---------------------------------------------------------------------------
int __fastcall TShowUserInfo::ShowModal()
{
Application->ModalStarted();
m_bakActiveWnd = GetActiveWindow();
TWinControl::Show();
String nickName = String(g_infoUser.strNickName);
if(nickName.IsEmpty()) {
UserName = String(g_infoUser.strUserName);//L"ID:" + IntToStr(g_infoUser.accountInfo.ID);
}
else {
UserName = nickName;
}
// Balance = g_infoUser.accountInfo.balance;
// Pops = g_infoUser.accountInfo.pops;
// Fans = g_infoUser.accountInfo.fans;
// Songs = g_infoUser.accountInfo.songs;
// Zones = f_CS_GetNewNoticeNum( g_infoUser.accountInfo.ID );
String strHeaderPath = g_strUserPath.c_str();
strHeaderPath += L"header\\";
String strIconFile = strHeaderPath + g_infoUser.strIconFile;
if( FileExists( strIconFile ) ) {
GetPic(strIconFile, true);
m_UserIcon->Picture->LoadFromFile( strIconFile );
}
m_ModalResult = 0;
m_IsActive = false;
SendMessage(Handle, WM_ACTIVATE, WA_ACTIVE, 0);
m_IsActive = true;
while(m_ModalResult == 0) {
Application->HandleMessage();
if(Application->Terminated)
m_ModalResult = -1;
}
TWinControl::Hide();
SetActiveWindow(m_bakActiveWnd);
Application->ModalFinished();
return m_ModalResult;
}
//---------------------------------------------------------------------------
void __fastcall TShowUserInfo::WMEraseBkgnd(TWMEraseBkgnd &Message)
{
TCanvas *canvas = new TCanvas();
canvas->Handle = Message.DC;
/* 绘制背景 */
canvas->Brush->Color = BK_COLOR;
canvas->FillRect(GetClientRect());
/* 绘制边框 */
canvas->Pen->Color = BORDER_COLOR;
canvas->MoveTo(FrameRoute[0].X, FrameRoute[0].Y);
canvas->LineTo(FrameRoute[1].X, FrameRoute[1].Y);
canvas->MoveTo(FrameRoute[1].X, FrameRoute[1].Y);
canvas->LineTo(FrameRoute[2].X, FrameRoute[2].Y);
canvas->MoveTo(FrameRoute[2].X, FrameRoute[2].Y);
canvas->LineTo(FrameRoute[3].X, FrameRoute[3].Y);
canvas->MoveTo(FrameRoute[3].X, FrameRoute[3].Y);
canvas->LineTo(FrameRoute[4].X-1, FrameRoute[4].Y);
canvas->MoveTo(FrameRoute[4].X-1, FrameRoute[4].Y);
canvas->LineTo(FrameRoute[5].X-1, FrameRoute[5].Y-1);
canvas->MoveTo(FrameRoute[5].X-1, FrameRoute[5].Y-1);
canvas->LineTo(FrameRoute[6].X, FrameRoute[6].Y-1);
canvas->MoveTo(FrameRoute[6].X, FrameRoute[6].Y-1);
canvas->LineTo(FrameRoute[0].X, FrameRoute[0].Y);
/* 绘制分割线 */
canvas->Pen->Color = SEPARATOR_COLOR;
canvas->MoveTo(10, 108+VIPHEIGHT);
canvas->LineTo(240, 108+VIPHEIGHT);
delete canvas;
}
//---------------------------------------------------------------------------
void __fastcall TShowUserInfo::WMKillFocus(TMessage &Message)
{
if(m_IsActive && m_ModalResult == 0)
m_ModalResult = -1;
}
//---------------------------------------------------------------------------
void __fastcall TShowUserInfo::WMPaint(TWMPaint &Message)
{
PaintHandler(Message);
}
//---------------------------------------------------------------------------
//void __fastcall TShowUserInfo::UserIconClick(TObject *Sender)
//{
// m_ModalResult = 2;
// Hide();
//
// String strHeaderPath = g_strUserPath.c_str();
// strHeaderPath += L"header\\";
//
// String strIconFile = strHeaderPath + g_infoUser.strIconFile;
// if( !FileExists( strIconFile ) )
// strIconFile = strHeaderPath + L"default.jpg";
// GetPic(strIconFile, true);
//
// TPicture *pPic = new TPicture();
// pPic->LoadFromFile( strIconFile );
//
// TImgCopperForm *pTImgCopperForm = new TImgCopperForm(this, TRect(0, 0, 90, 90), pPic);
// pTImgCopperForm->Caption = L"编辑头像";
// pTImgCopperForm->Width = 260;
// pTImgCopperForm->Height = 300;
//
// if( mrOk==pTImgCopperForm->ShowModal() ) {
//
// bool bUploadUsrIcon = false;
// if( NULL==g_pTThreadHttpPostUsrIcon ) {
//
// bUploadUsrIcon = true;
//
// }else if( !g_pTThreadHttpPostUsrIcon->Started ||
// (g_pTThreadHttpPostUsrIcon->Started && g_pTThreadHttpPostUsrIcon->Finished) )
// {
// bUploadUsrIcon = true;
// }
//
// if( bUploadUsrIcon ){
//
// SAFE_DELETE(g_pTThreadHttpPostUsrIcon)
// g_pTThreadHttpPostUsrIcon
// = new TThreadHttpPostUsrIcon(true, this,
// pTImgCopperForm->m_strCopperPath);
// g_pTThreadHttpPostUsrIcon->Priority = tpIdle;
// g_pTThreadHttpPostUsrIcon->Start();
// }
// }
//
// SAFE_DELETE(pTImgCopperForm);
// SAFE_DELETE(pPic);
//}
//---------------------------------------------------------------------------
//void __fastcall TShowUserInfo::VIPClick(TObject *Sender)
//{
// char strURL[256];
// f_CS_GetWebPageURL( URL_VIPMEMBER, strURL );
// String urlVIP = strURL;
// if( urlVIP.Length() ) {
// ShellExecute(Handle, NULL, urlVIP.c_str(), NULL, NULL, SW_SHOWNORMAL);
// }
//}
////---------------------------------------------------------------------------