572 lines
19 KiB
C++
572 lines
19 KiB
C++
//---------------------------------------------------------------------------
|
|
#include <vcl.h>
|
|
#pragma hdrstop
|
|
|
|
#include "NotificationFormUnit.h"
|
|
#include "GlobalUnit.h"
|
|
|
|
#pragma package(smart_init)
|
|
#pragma link "PNGButton"
|
|
#pragma resource "*.dfm"
|
|
TNotificationForm *NotificationForm;
|
|
//---------------------------------------------------------------------------
|
|
#define PERIOD_SHUTDOW ( 60*1000 )
|
|
#define PERIOD_TEXT ( 3*1000 )
|
|
//---------------------------------------------------------------------------
|
|
#define LEN_BKG_EXTERNAL_ROUND (1)
|
|
#define LEN_BKG_EXTERNAL_FRMAE (1)
|
|
#define LEN_BKG_INTERNAL_LINE (23)
|
|
//---------------------------------------------------------------------------
|
|
#define AD_PANEL_TOP (LEN_BKG_INTERNAL_LINE + 3)
|
|
#define AD_PANEL_LEFT (8)
|
|
#define AD_PANEL_WIDTH (Width - 2*AD_PANEL_LEFT)
|
|
#define AD_PANEL_HEIGHT (75)
|
|
|
|
#define TEXT_HEIGHT (LEN_BKG_INTERNAL_LINE + 1)
|
|
//---------------------------------------------------------------------------
|
|
#define JSON_ID_TYPE 0
|
|
#define JSON_ID_NAME 1
|
|
#define JSON_ID_COUNT 2
|
|
#define JSON_ID_DB 3
|
|
|
|
#define JSON_TYPE_PIC 1
|
|
#define JSON_TYPE_TEXT 2
|
|
#define JSON_TYPE_CONTENT 3
|
|
//---------------------------------------------------------------------------
|
|
const static COLORREF
|
|
CLR_TXT_HOT = RGB(171, 186, 207),
|
|
CLR_BKG_EXTERNAL_ROUND = RGB(60, 62, 70),
|
|
CLR_BKG_EXTERNAL_FRMAE = RGB(98, 106, 114),
|
|
CLR_BKG_INTERNAL = RGB(39, 42, 47),
|
|
CLR_BKG_INTERNAL_LINE_HIG = RGB(71, 73, 78),
|
|
CLR_BKG_INTERNAL_LINE_BLACK = RGB(22, 24, 26);
|
|
//---------------------------------------------------------------------------
|
|
__fastcall TNotificationForm::TNotificationForm(TComponent* Owner)
|
|
: TForm(Owner)
|
|
{
|
|
Color = CLR_BKG_INTERNAL;
|
|
|
|
this->Left = Screen->Width - this->Width - 14;
|
|
this->Top = Screen->WorkAreaHeight - this->Height;
|
|
|
|
//公告区
|
|
m_pTextNotiTimer = new TTimer(this);
|
|
m_pTextNotiTimer->Enabled = false;
|
|
m_pTextNotiTimer->Interval = PERIOD_TEXT;
|
|
m_pTextNotiTimer->OnTimer = NotificationTimerProc;
|
|
|
|
//自动关闭
|
|
m_pNotiShutDownTimer = new TTimer(this);
|
|
m_pNotiShutDownTimer->Enabled = false;
|
|
m_pNotiShutDownTimer->Interval = PERIOD_SHUTDOW;
|
|
m_pNotiShutDownTimer->OnTimer = NotificationTimerProc;
|
|
|
|
m_pNotificationThread = new TNotificationThread(true, this);
|
|
m_pNotificationThread->Start();
|
|
|
|
SetTransparent( this );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TNotificationForm::setPANEL()
|
|
{
|
|
bool bSuccess = true;
|
|
int tmp = m_VCJsonAD.size();
|
|
if( m_VCJsonAD.size() ) {
|
|
|
|
m_pNotiADPanel = new TNotiADPanel(this, &m_VCJsonAD);
|
|
m_pNotiADPanel->Parent = this;
|
|
m_pNotiADPanel->Top = AD_PANEL_TOP;
|
|
m_pNotiADPanel->Left = AD_PANEL_LEFT;
|
|
m_pNotiADPanel->Width = AD_PANEL_WIDTH;
|
|
m_pNotiADPanel->Height = AD_PANEL_HEIGHT;
|
|
}else { bSuccess = false;}
|
|
|
|
if( m_VCJsonContent.size() ) {
|
|
m_pNotiContenPanel = new TNotiContenPanel(this, &m_VCJsonContent);
|
|
m_pNotiContenPanel->Parent = this;
|
|
if( bSuccess ) {
|
|
m_pNotiContenPanel->Top = AD_PANEL_TOP + AD_PANEL_HEIGHT;
|
|
m_pNotiContenPanel->Left = AD_PANEL_LEFT;
|
|
m_pNotiContenPanel->Width = this->Width - 2*AD_PANEL_LEFT;
|
|
m_pNotiContenPanel->Height = this->Height - TEXT_HEIGHT - m_pNotiContenPanel->Top;
|
|
}else{
|
|
m_pNotiContenPanel->Top = AD_PANEL_TOP;
|
|
m_pNotiContenPanel->Left = 0;
|
|
m_pNotiContenPanel->Width = this->Width;
|
|
m_pNotiContenPanel->Height = this->Height - TEXT_HEIGHT - m_pNotiContenPanel->Top;
|
|
}
|
|
bSuccess = true;
|
|
}else { bSuccess = false;}
|
|
|
|
if( m_VCJonNoti.size() ) {
|
|
|
|
m_pNotiUrl = new TUrlLabel(this);
|
|
m_pNotiUrl->Parent = this;
|
|
|
|
m_pNotiUrl->Caption = (*m_VCJonNoti.begin()).strName;
|
|
|
|
String url = (*m_VCJonNoti.begin()).strUrl;
|
|
if( url.Length() ) {
|
|
m_pNotiUrl->StrUrl = url;
|
|
}else{
|
|
char strURL[256];
|
|
if( f_CS_GetWebPageURL )
|
|
f_CS_GetWebPageURL( URL_HOMEPAGE, strURL );
|
|
m_pNotiUrl->StrUrl = (String)strURL;
|
|
}
|
|
|
|
m_pNotiUrl->Top = this->Height - TEXT_HEIGHT + (TEXT_HEIGHT - m_pNotiUrl->Height)/2;
|
|
m_pNotiUrl->Left = (this->Width - m_pNotiUrl->Width)/2;
|
|
|
|
if( m_VCJonNoti.size() > 1) {
|
|
m_pNotiUrl->OnMouseEnter = NotiChangeMouseEnter;
|
|
m_pNotiUrl->OnMouseLeave = NotiChangeMouseLeave;
|
|
m_pTextNotiTimer->Enabled = true;
|
|
}
|
|
}
|
|
|
|
if( bSuccess ){
|
|
m_pNotiShutDownTimer->Enabled = true;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
void __fastcall TNotificationForm::CreateParams(Vcl::Controls::TCreateParams &Params)
|
|
{
|
|
TForm::CreateParams(Params);
|
|
|
|
Params.WndParent = GetDesktopWindow();
|
|
Params.ExStyle |= WS_EX_TOOLWINDOW;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TNotificationForm::FormShow(TObject *Sender)
|
|
{
|
|
this->Left = Screen->Width - this->Width - 14;
|
|
this->Top = Screen->WorkAreaHeight - this->Height;
|
|
// AnimateWindow(Handle, 1000, AW_BLEND);
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TNotificationForm::FormClose(TObject *Sender, TCloseAction &Action)
|
|
|
|
{
|
|
/* AnimateWindow(Handle,1000,AW_BLEND+AW_HIDE);
|
|
|
|
if( m_pNotiADPanel ) { delete m_pNotiADPanel; m_pNotiADPanel = NULL; }
|
|
|
|
if( m_pTextNotiTimer ){ delete m_pTextNotiTimer; m_pTextNotiTimer = NULL; }
|
|
if( m_pNotiShutDownTimer ){ delete m_pNotiShutDownTimer; m_pNotiShutDownTimer = NULL; }
|
|
if( m_pNotiUrl ) { delete m_pNotiUrl; m_pNotiUrl = NULL;}
|
|
|
|
if( m_pNotiContenPanel ) { delete m_pNotiContenPanel; m_pNotiContenPanel = NULL; }
|
|
|
|
if( m_pNotificationThread ) { delete m_pNotificationThread; m_pNotificationThread = NULL; }
|
|
|
|
ClearJsonDirect();
|
|
|
|
m_VCJsonAD.clear();
|
|
m_VCJonNoti.clear();
|
|
m_VCJsonContent.clear();
|
|
*/
|
|
PostMessage(Application->MainForm->Handle, UM_NOTIFICATION,
|
|
NOTIFICATION_SHOW_CLOSED, 0 );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
__fastcall TNotificationForm::~TNotificationForm()
|
|
{
|
|
if( m_pNotiADPanel ) { delete m_pNotiADPanel; m_pNotiADPanel = NULL; }
|
|
|
|
if( m_pTextNotiTimer ){ delete m_pTextNotiTimer; m_pTextNotiTimer = NULL; }
|
|
if( m_pNotiShutDownTimer ){ delete m_pNotiShutDownTimer; m_pNotiShutDownTimer = NULL; }
|
|
if( m_pNotiUrl ) { delete m_pNotiUrl; m_pNotiUrl = NULL;}
|
|
|
|
if( m_pNotiContenPanel ) { delete m_pNotiContenPanel; m_pNotiContenPanel = NULL; }
|
|
|
|
if( m_pNotificationThread ) {
|
|
StopURLDownload();
|
|
m_pNotificationThread->WaitFor();// >Terminate();
|
|
delete m_pNotificationThread;
|
|
m_pNotificationThread = NULL;
|
|
}
|
|
|
|
ClearJsonDirect();
|
|
|
|
m_VCJsonAD.clear();
|
|
m_VCJonNoti.clear();
|
|
m_VCJsonContent.clear();
|
|
}
|
|
|
|
bool __fastcall TNotificationForm::ParseJson()
|
|
{
|
|
ClearJsonDirect();
|
|
|
|
char strURL[256];
|
|
if( S_OK != f_CS_GetWebPageURL( URL_JASONQUERY, strURL ) )
|
|
return false;
|
|
|
|
String urlJson = strURL;
|
|
String strJson;
|
|
String picDirect = JSON_PIC_DERICTORY;
|
|
String picName = L"json.tmp";
|
|
TStringStream *strStream = new TStringStream(NULL, 65001);
|
|
|
|
HRESULT resultJson = GetUrlData(urlJson, picDirect, picName, strStream, true);
|
|
|
|
strJson= strStream->DataString;
|
|
delete strStream;
|
|
|
|
// HRESULT resultJson = S_OK;
|
|
// strJson = L"{\"1\":{\"type\":1,\"name\":\"活动\",\"count\":3,\"db\":{\"1\":{\"name\":\"改编达人\",\"picture\":\"http://www.ichangzuo.com/ichangzuo/File/Music/Cover/201307/414_1374757039.png\",\"file\":\"\",\"url\":\"http://composemusic.xicp.net:81/index.php/Activity?tpl=show\",\"author\":\"\"},\"2\":{\"name\":\"改编达人\",\"picture\":\"http://www.ichangzuo.com/ichangzuo/File/Music/Cover/201403/414_1396202466.png\",\"file\":\"\",\"url\":\"http://composemusic.xicp.net:81/index.php/Activity?tpl=show\",\"author\":\"\"},\"3\":{\"name\":\"改编达人\",\"picture\":\"http://www.ichangzuo.com/ichangzuo/File/User/Photo/414_1374202747.jpg\",\"file\":\"\",\"url\":\"http://composemusic.xicp.net:81/index.php/Activity?tpl=show\",\"author\":\"\"}}},\"2\":{\"type\":1,\"name\":\"广告\",\"count\":0},\"3\":{\"type\":1,\"name\":\"软件\",\"count\":0},\"4\":{\"type\":3,\"name\":\"推荐音乐\",\"count\":3,\"db\":{\"1\":{\"name\":\"跟着感觉走\",\"picture\":\"http://composemusic.xicp.net:81/ichangzuo/File/Web/Default/music_cover_default.jpg\",\"file\":\"http://composemusic.xicp.net:81/ichangzuo/File/Music/Music/201307/867_1374396650.MP3\",\"url\":\"http://composemusic.xicp.net:81/index.php/Music?tpl=play&i=22\",\"author\":\"木木\"},\"2\":{\"name\":\"墨西歌舞\",\"picture\":\"http://composemusic.xicp.net:81/ichangzuo/File/User/Default/Music_cover/10475_1380381900.jpg\",\"file\":\"http://composemusic.xicp.net:81/ichangzuo/File/Music/Music/201309/10475_1378453592.mp3\",\"url\":\"http://composemusic.xicp.net:81/index.php/Music?tpl=play&i=549\",\"author\":\"下雨了\"},\"3\":{\"name\":\"123的\",\"picture\":\"http://composemusic.xicp.net:81/ichangzuo/File/Web/Default/music_cover_default.jpg\",\"file\":\"http://composemusic.xicp.net:81/ichangzuo/File/Music/Music/201403/23599_1395305792.mp3\",\"url\":\"http://composemusic.xicp.net:81/index.php/Music?tpl=play&i=2457\",\"author\":\"小花花\"}}},\"5\":{\"type\":3,\"name\":\"推荐歌词\",\"count\":1,\"db\":{\"1\":{\"name\":\"你会\",\"picture\":\"http://composemusic.xicp.net:81/ichangzuo/File/User/Portrait/default.jpg\",\"file\":\"\",\"url\":\"http://composemusic.xicp.net:81/index.php/Lyric?tpl=show&i=33\",\"author\":\"小花花\"}}},\"6\":{\"type\":2,\"name\":\"公告\",\"count\":3,\"db\":{\"1\":{\"name\":\"333\",\"picture\":\"\",\"file\":\"\",\"url\":\"\",\"author\":\"0\"},\"2\":{\"name\":\"这是一个测试的标题\",\"picture\":\"\",\"file\":\"\",\"url\":\"\",\"author\":\"0\"},\"3\":{\"name\":\"这是一个测试\",\"picture\":\"\",\"file\":\"\",\"url\":\"\",\"author\":\"0\"}}}}";
|
|
|
|
if( !m_pNotiShutDownTimer || !(resultJson==S_OK && strJson.Length() > 1) ){
|
|
return false;
|
|
}
|
|
|
|
String jsonPath = JSON_PIC_DERICTORY;
|
|
bool bSuccess = false;
|
|
int indexPic = 0;
|
|
|
|
TJSONObject *jsonOri = GetJsonContext(strJson);
|
|
if( jsonOri==NULL ) {
|
|
return false;
|
|
}
|
|
|
|
try
|
|
{
|
|
for( int i=0; i<jsonOri->Size(); i++ )
|
|
{
|
|
TJSONObject *ValueID = GetJsonValue(jsonOri, i);
|
|
if( ValueID==NULL ) {continue;}
|
|
|
|
TJSONObject *ValueCount = GetJsonValue(ValueID, JSON_ID_COUNT);
|
|
if( ValueCount==NULL ) { continue; }
|
|
if( StrToInt(ValueCount->Value())==0 ) { continue; }
|
|
|
|
TJSONObject *ValueDB = GetJsonValue(ValueID, JSON_ID_DB);
|
|
if( ValueDB==NULL) {continue;}
|
|
|
|
bool bTypeContent = false;
|
|
TJSONDB jsonContent;
|
|
for(int i=0; i<ValueDB->Size(); i++)
|
|
{
|
|
TJSONObject *ValueDBID = GetJsonValue(ValueDB, i);
|
|
|
|
if( ValueDBID==NULL ) {continue;}
|
|
|
|
TJSONObject *ValueType = GetJsonValue(ValueID, JSON_ID_TYPE);
|
|
if( ValueType==NULL ) { continue;}
|
|
|
|
TJSON jsonAdd;
|
|
|
|
jsonAdd.strName = ValueDBID->GetValue(L"name")->Value();
|
|
jsonAdd.strFileUrl = ValueDBID->GetValue(L"file")->Value();
|
|
jsonAdd.strUrl = ValueDBID->GetValue(L"url")->Value();
|
|
jsonAdd.strAuthor = ValueDBID->GetValue(L"author")->Value();
|
|
|
|
String strPicDirect;
|
|
String strType = ValueType->Value();
|
|
if( StrToInt(strType)==JSON_TYPE_PIC ){
|
|
strPicDirect = JSON_PIC_DERICTORY_AD;
|
|
}else if( StrToInt(strType)==JSON_TYPE_TEXT ) {
|
|
strPicDirect = JSON_PIC_DERICTORY_TEXT;
|
|
}else if( StrToInt(strType)==JSON_TYPE_CONTENT ){
|
|
strPicDirect = JSON_PIC_DERICTORY_CONTENT;
|
|
}
|
|
String strPicUrl = ValueDBID->GetValue(L"picture")->Value();
|
|
// String strPicUrl = L"http://www.ichangzuo.com/ichangzuo/File/Software/Content/Ac/137784127986.jpg";
|
|
if( strPicUrl.Length() ) {
|
|
strPicDirect = jsonPath + strPicDirect;
|
|
String strPicName = IntToStr(indexPic) + ExtractFileExt(strPicUrl);
|
|
resultJson = GetUrlData(strPicUrl, strPicDirect, strPicName);
|
|
|
|
if( !m_pNotiShutDownTimer ){
|
|
delete jsonOri;
|
|
return false;
|
|
}
|
|
|
|
if( resultJson == S_OK ){
|
|
jsonAdd.strNamePic = strPicName;
|
|
indexPic++;
|
|
}
|
|
}
|
|
|
|
if( StrToInt(strType)==JSON_TYPE_PIC && jsonAdd.strNamePic.Length() ){
|
|
m_VCJsonAD.push_back(jsonAdd);
|
|
}else if( StrToInt(strType)==JSON_TYPE_TEXT ) {
|
|
m_VCJonNoti.push_back(jsonAdd);
|
|
}else if( StrToInt(strType)==JSON_TYPE_CONTENT ){
|
|
jsonContent.vcContent.push_back(jsonAdd);
|
|
bTypeContent = true;
|
|
}
|
|
}
|
|
|
|
if( bTypeContent && jsonContent.vcContent.size() ) {
|
|
|
|
TJSONObject *ValueName = GetJsonValue(ValueID, JSON_ID_NAME);
|
|
if( ValueName == NULL ){
|
|
jsonContent.strDbName = L"";
|
|
}else {
|
|
jsonContent.strDbName = ValueName->Value();
|
|
}
|
|
m_VCJsonContent.push_back(jsonContent);
|
|
}
|
|
}
|
|
}catch(Exception &e){
|
|
delete jsonOri;
|
|
return false;
|
|
}
|
|
|
|
if( jsonOri ){
|
|
delete jsonOri;
|
|
jsonOri = NULL;
|
|
}
|
|
|
|
if( m_VCJsonAD.size() ) {
|
|
bSuccess = true;
|
|
}
|
|
|
|
if( m_VCJsonContent.size() ){
|
|
bSuccess = true;
|
|
}else { bSuccess = false;}
|
|
|
|
return bSuccess;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
bool __fastcall TNotificationForm::LoadImg()
|
|
{
|
|
TPicture *picImg = NULL;
|
|
int adSize = m_VCJsonAD.size();
|
|
|
|
if( adSize )
|
|
{
|
|
VCTJSON::iterator vc_pFindAD;
|
|
for( vc_pFindAD = m_VCJsonAD.begin();
|
|
vc_pFindAD != m_VCJsonAD.end();
|
|
vc_pFindAD++ )
|
|
{
|
|
if( (*vc_pFindAD).strNamePic.Length() ) {
|
|
|
|
if( GetPic(vc_pFindAD->strNamePic) )
|
|
{
|
|
try{
|
|
picImg = new TPicture();
|
|
picImg->LoadFromFile( (*vc_pFindAD).strNamePic );
|
|
delete picImg;
|
|
}catch(Exception &e){
|
|
return false;
|
|
}
|
|
}else{
|
|
return false;
|
|
}
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
adSize = m_VCJsonContent.size();
|
|
|
|
if( adSize ){
|
|
VCTJSONDB::iterator vc_pFindContent;
|
|
for( vc_pFindContent = m_VCJsonContent.begin();
|
|
vc_pFindContent != m_VCJsonContent.end();
|
|
vc_pFindContent++)
|
|
{
|
|
VCTJSON::iterator vc_pFindContentPIC;
|
|
for( vc_pFindContentPIC = (*vc_pFindContent).vcContent.begin();
|
|
vc_pFindContentPIC != (*vc_pFindContent).vcContent.end();
|
|
vc_pFindContentPIC++)
|
|
{
|
|
|
|
if( (*vc_pFindContentPIC).strNamePic.Length() )
|
|
{
|
|
if( GetPic(vc_pFindContentPIC->strNamePic) ) {
|
|
try{
|
|
picImg = new TPicture();
|
|
picImg->LoadFromFile( (*vc_pFindContentPIC).strNamePic );
|
|
delete picImg;
|
|
}catch(Exception &e){
|
|
return false;
|
|
}
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TNotificationForm::NotificationTimerProc(TObject* Sender)
|
|
{
|
|
TTimer *NotiTimer = (TTimer *)Sender;
|
|
|
|
int index = -1;
|
|
int size = 0;
|
|
|
|
if( NotiTimer== m_pTextNotiTimer) { //公告切换
|
|
|
|
index = -1;
|
|
size = m_VCJonNoti.size();
|
|
if( size>1 ) {
|
|
index = (m_iTextNotiIndex+1<size)?(m_iTextNotiIndex+1):0;
|
|
}else {
|
|
m_pTextNotiTimer->Enabled = false;
|
|
return;
|
|
}
|
|
|
|
if( m_iTextNotiIndex != index )
|
|
{
|
|
m_iTextNotiIndex = index;
|
|
VCTJSON::iterator vc_pFindNoti = m_VCJonNoti.begin() + index;
|
|
String url = (*vc_pFindNoti).strUrl;
|
|
if( url.Length() ) {
|
|
m_pNotiUrl->StrUrl = url;
|
|
}else{
|
|
m_pNotiUrl->StrUrl = L"http://www.ichangzuo.com/";
|
|
}
|
|
|
|
m_pNotiUrl->Caption = (*vc_pFindNoti).strName;
|
|
m_pNotiUrl->Left = (this->Width - m_pNotiUrl->Width)/2;
|
|
}
|
|
}else if( NotiTimer == m_pNotiShutDownTimer ) {
|
|
|
|
m_pNotiShutDownTimer->Enabled = false;
|
|
this->Close();
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TNotificationForm::WMEraseBkgnd(Winapi::Messages::TWMEraseBkgnd &Message)
|
|
{
|
|
TRect rect = GetClientRect();
|
|
TRect rectFill = rect;
|
|
|
|
TCanvas* tempCanvas = new TCanvas;
|
|
tempCanvas->Handle = Message.DC;
|
|
|
|
rectFill.Top = rectFill.Top + LEN_BKG_EXTERNAL_ROUND;
|
|
rectFill.Left = rectFill.Left + LEN_BKG_EXTERNAL_ROUND;
|
|
rectFill.Right = rectFill.Right - LEN_BKG_EXTERNAL_ROUND;
|
|
rectFill.Bottom = rectFill.Bottom - LEN_BKG_EXTERNAL_ROUND;
|
|
|
|
tempCanvas->Brush->Color = CLR_BKG_INTERNAL;
|
|
|
|
tempCanvas->FillRect( rectFill );
|
|
|
|
// //==========画圆角
|
|
tempCanvas->Pen->Color = CLR_BKG_EXTERNAL_ROUND;
|
|
int X,Y;
|
|
//上面的
|
|
Y = 0;
|
|
|
|
X = 0;
|
|
tempCanvas->Pixels[X][Y] = tempCanvas->Pen->Color;
|
|
X = Width - LEN_BKG_EXTERNAL_ROUND;
|
|
tempCanvas->Pixels[X][Y] = tempCanvas->Pen->Color;
|
|
|
|
//下面的
|
|
Y = Height - LEN_BKG_EXTERNAL_ROUND;
|
|
|
|
X = 0;
|
|
tempCanvas->Pixels[X][Y] = tempCanvas->Pen->Color;
|
|
X = Width - LEN_BKG_EXTERNAL_ROUND;
|
|
tempCanvas->Pixels[X][Y] = tempCanvas->Pen->Color;
|
|
|
|
//===========画边框
|
|
tempCanvas->Pen->Color = CLR_BKG_EXTERNAL_FRMAE;
|
|
|
|
tempCanvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, 0 );
|
|
tempCanvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, 0 );
|
|
|
|
tempCanvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, Height-LEN_BKG_EXTERNAL_FRMAE );
|
|
tempCanvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, Height-LEN_BKG_EXTERNAL_FRMAE );
|
|
|
|
tempCanvas->MoveTo( 0, LEN_BKG_EXTERNAL_FRMAE );
|
|
tempCanvas->LineTo( 0, Height-LEN_BKG_EXTERNAL_FRMAE );
|
|
|
|
tempCanvas->MoveTo( Width-LEN_BKG_EXTERNAL_FRMAE, LEN_BKG_EXTERNAL_FRMAE );
|
|
tempCanvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, Height-LEN_BKG_EXTERNAL_FRMAE );
|
|
|
|
//===========画分割线
|
|
int iLineHeight = LEN_BKG_INTERNAL_LINE;
|
|
|
|
tempCanvas->Pen->Color = CLR_BKG_INTERNAL_LINE_HIG;
|
|
tempCanvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, iLineHeight );
|
|
tempCanvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, iLineHeight );
|
|
tempCanvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, iLineHeight+2 );
|
|
tempCanvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, iLineHeight+2 );
|
|
|
|
tempCanvas->Pen->Color = CLR_BKG_INTERNAL_LINE_BLACK;
|
|
tempCanvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, iLineHeight+1 );
|
|
tempCanvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, iLineHeight+1 );
|
|
|
|
//画标题
|
|
tempCanvas->Font->Color = CLR_TXT_HOT;
|
|
tempCanvas->Brush->Style = bsClear;
|
|
TSize size = tempCanvas->TextExtent( Caption );
|
|
X = LEN_BKG_EXTERNAL_FRMAE + ( Width - size.Width )/2,
|
|
Y = LEN_BKG_EXTERNAL_FRMAE + ( LEN_BKG_INTERNAL_LINE-size.Height )/2;
|
|
X = ( Width - size.Width )/2;
|
|
Y = ( LEN_BKG_INTERNAL_LINE-size.Height )/2;
|
|
tempCanvas->TextOut( X, Y, Caption );
|
|
|
|
delete tempCanvas;
|
|
|
|
Message.Result = true;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TNotificationForm::WMNCHitTest(TWMNCHitTest &Msg)
|
|
{
|
|
TForm::Dispatch(&Msg);
|
|
|
|
if( Msg.Result==HTCLIENT &&
|
|
(Msg.YPos<Top+LEN_BKG_INTERNAL_LINE) &&
|
|
(Msg.XPos<(Left+ m_PNGButtonClose->Left) ) )
|
|
{
|
|
Msg.Result = HTCAPTION;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TNotificationForm::m_PNGButtonCloseClick(TObject *Sender)
|
|
{
|
|
m_pNotiShutDownTimer->Enabled = false;
|
|
this->Close();
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
void __fastcall TNotificationForm::NotiChangeMouseEnter(TObject *Sender)
|
|
{
|
|
m_pTextNotiTimer->Enabled = false;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
void __fastcall TNotificationForm::NotiChangeMouseLeave(TObject *Sender)
|
|
{
|
|
m_pTextNotiTimer->Enabled = true;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TNotificationForm::ClearJsonDirect()
|
|
{
|
|
String fileDirect = g_strUserPath.c_str();
|
|
fileDirect += JSON_PIC_DERICTORY;
|
|
|
|
if( DirectoryExists(fileDirect) ) {
|
|
TDirectory *clearDirect = new TDirectory();
|
|
clearDirect->Delete(fileDirect, true);
|
|
delete clearDirect;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|