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

484 lines
14 KiB
C++

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "HelpFormUnit.h"
#include "GlobalUnit.h"
#include "MessageDef.h"
#include "MessageFormUnit.h"
#include "ProgressFormUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "GeneralDialogPanel"
#pragma link "PNGButton"
#pragma link "CapButton"
#pragma resource "*.dfm"
THelpForm *HelpForm;
//---------------------------------------------------------------------------
#define WINDOW_MAX 0
#define WINDOW_NORMAL 1
#define WINDOW_MIN 2
#define WNDOW_CLOSE 3
//---------------------------------------------------------------------------
__fastcall TTabButton::TTabButton(System::Classes::TComponent* AOwner)
: TPNGButton( AOwner )
{
Caption = "";
}
//---------------------------------------------------------------------------
__fastcall TTabButton::~TTabButton(void)
{
}
//---------------------------------------------------------------------------
void __fastcall TTabButton::SetFontSize(int sz)
{
Canvas->Font->Size = sz;
}
//---------------------------------------------------------------------------
void __fastcall TTabButton::Paint(void)
{
TPNGButton::Paint();
Canvas->Brush->Style = bsClear;
Canvas->Font->Color = RGB( 184,188,189 );
Canvas->Font->Name = g_strTxtFontName;
Canvas->Font->Quality = TFontQuality::fqClearTypeNatural;
// if( !strcmp( g_strTxtFontName, "微软雅黑" ) ){
// Canvas->Font->Size = 10;
// }
// else{
// Canvas->Font->Size = 9;
// }
int nLength = Canvas->TextWidth( Caption );
int nHeight = Canvas->TextHeight( Caption );
Canvas->TextOutW( Width/2 - nLength/2 - 5,Height/2 - nHeight/2,Caption );
}
//---------------------------------------------------------------------------
__fastcall THelpForm::THelpForm(TComponent* Owner)
: TForm(Owner)
{
Window_state = WINDOW_NORMAL;
m_nUserNoticeNum = 0;
m_PngImage = new TPngImage();
m_PngImage->LoadFromResourceName(int(HInstance), L"HelpPNG");
m_PanelShow = NULL;
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::FormClose(TObject *Sender, TCloseAction &Action)
{
PostMessage( Application->MainForm->Handle, UM_SHOWHELP, false, 0 );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::RestClick(TObject *Sender)
{
SetSize( HLP_WINDOW_NORMAL );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::MinClick(TObject *Sender)
{
SetSize( HLP_WINDOW_MIN );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::MaxClick(TObject *Sender)
{
SetSize( HLP_WINDOW_MAX );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::SetSize( int iState )
{
Window_state = iState;
switch( iState )
{
case HLP_WINDOW_MAX:
SetBounds( Application->MainForm->Left, Application->MainForm->Top + 44,
Application->MainForm->Width, Application->MainForm->Height - 44 );
break;
case HLP_WINDOW_MIN:
SetBounds( Application->MainForm->Left + Application->MainForm->Width - 160,
Application->MainForm->Top + Application->MainForm->Height - 34,
150, 24 );
break;
case HLP_WINDOW_NORMAL:
SetBounds( Application->MainForm->Left + Application->MainForm->Width/2 - 389,
Application->MainForm->Top + Application->MainForm->Height/2 - 220,
778, 440 );
break;
}
m_btnMax->Visible = iState==HLP_WINDOW_NORMAL;
m_btnMin->Visible = iState!= HLP_WINDOW_MIN;
m_btnRest->Visible = iState!=HLP_WINDOW_NORMAL;
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::FormResize(TObject *Sender)
{
switch( Window_state ){
case HLP_WINDOW_MIN:
m_lblGroupLabel->Top = 50;
m_lblGroup->Top = 50;
m_lblVideoLabel->Top = 50;
m_lblVideo->Top = 50;
m_lblUrlLabel->Top = 50;
m_lblUrl->Top = 50;
break;
case HLP_WINDOW_MAX:
case HLP_WINDOW_NORMAL:
m_PanelShow->SetBounds( 40, 67, Width - 80, Height - 120 );
m_memMsg->SetBounds( 15, 15, m_PanelShow->Width - 45, 130 );
m_btnSubmit->Top = m_memMsg->Top + m_memMsg->Height + 5;
m_btnSubmit->Left = m_memMsg->Left + m_memMsg->Width - m_btnSubmit->Width;
m_lblGroupLabel->Top = Height - 35;
m_lblGroup->Top = m_lblGroupLabel->Top;
m_lblVideoLabel->Top = m_lblGroupLabel->Top;
m_lblVideo->Top = m_lblGroupLabel->Top;
m_lblUrlLabel->Top = m_lblGroupLabel->Top;
m_lblUrl->Top = m_lblGroupLabel->Top;
break;
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::FormCreate(TObject *Sender)
{
m_GenerPanel->Font->Size = g_szFont9;
for( int i=0;i<TAB_NUM;i++ ){
m_arrTabs[i] = new TTabButton(this);
m_arrTabs[i]->Parent = m_GenerPanel;
m_arrTabs[i]->ImgStates = 4;
m_arrTabs[i]->PngImg = m_PngImage;//LoadFromResourceName( int(HInstance), L"HelpPNG" );
m_arrTabs[i]->Top = 40;
m_arrTabs[i]->SetFontSize(g_szFont10);
m_arrTabs[i]->OnClick = TabClick;
m_arrTabs[i]->Tag = i;
if(i==2){
m_arrTabs[i]->Left = 78;
m_arrTabs[i]->Visible = false;
}
else if(i>2)
m_arrTabs[i]->Left = 78 + 70*(i-1);
else
m_arrTabs[i]->Left = 78 + 70*i;
// if( i<=TAB_SW )
// m_arrTabs[i]->OnClick = TabClick;
// else if( i==TAB_MN )
// m_arrTabs[i]->OnClick = HelpClick;
// else if ( i==TAB_AB )
// m_arrTabs[i]->OnClick = AboutClick;
m_arrTabs[i]->SendToBack();
}
m_arrTabs[TAB_QA]->Caption = "常见问题";
m_arrTabs[TAB_FB]->Caption = "我要提问";
m_arrTabs[TAB_NT]->Caption = "网站消息";
m_arrTabs[TAB_CN]->Caption = "唱作音符";
m_arrTabs[TAB_SW]->Caption = "更多软件";
m_arrTabs[TAB_MN]->Caption = "用户手册";
m_arrTabs[TAB_AB]->Caption = "关于";
m_arrTabs[TAB_QA]->Down = true;
m_PanelShow = new THelpPanel(this);
m_PanelShow->Parent = this;
m_PanelShow->Left = 40;
m_PanelShow->Top = 67;
m_PanelShow->Width = 697;
m_PanelShow->Height = 320;
m_PanelShow->OnClick = panelShowClick;
m_PanelShow->Visible = true;
m_PanelShow->SetTextFontSize(m_memMsg->Font->Size);
m_memMsg->Parent = m_PanelShow;
m_memMsg->Left = 15;
m_memMsg->Top = 15;
m_memMsg->Width = m_PanelShow->Width - 45;
m_memMsg->Height = 130;
m_memMsg->Enabled = !g_bUpdateMandatory;
m_btnSubmit->Parent = m_PanelShow;
m_btnSubmit->Left = m_memMsg->Left + m_memMsg->Width - m_btnSubmit->Width;
m_btnSubmit->Top = m_memMsg->Top + m_memMsg->Height + 5;
m_btnSubmit->FontSize = m_memMsg->Font->Size;
m_lblMsgHead->Parent = m_PanelShow;
m_lblMsgHead->Left = m_PanelShow->Left + 15;
m_lblMsgHead->Top = 15;
m_lblMsgNum->Parent = m_PanelShow;
m_lblMsgNum->Left = m_lblMsgHead->Left + m_lblMsgHead->Width+1;
m_lblMsgNum->Top = 15;
m_lblMsgMiddle->Parent = m_PanelShow;
m_lblMsgMiddle->Left = m_lblMsgNum->Left + m_lblMsgNum->Width+1;
m_lblMsgMiddle->Top = 15;
m_lblMsgURL->Parent = m_PanelShow;
m_lblMsgURL->Left = m_lblMsgMiddle->Left + m_lblMsgMiddle->Width+1;
m_lblMsgURL->Top = 15;
m_lblMsgTail->Parent = m_PanelShow;
m_lblMsgTail->Left = m_lblMsgURL->Left + m_lblMsgURL->Width+1;
m_lblMsgTail->Top = 15;
m_pImgNoticeTip = new TPngImage();
m_pImgNoticeTip->LoadFromResourceName(int(HInstance), "NoticeBK");
m_PanelShow->SetMode(0);
SetTransparent( this );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::FormActivate(TObject *Sender)
{
// m_lblUrl->Caption = g_strServerURL;
// m_pbUserNoticeNum->Visible = (m_nUserNoticeNum>0);
m_PanelShow->InitialVars();
m_PanelShow->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::FormDeactivate(TObject *Sender)
{
// m_PanelShow->SaveFirstRow();
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::panelShowClick(TObject *Sender)
{
m_PanelShow->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::SetNoticeNum( int num, int iType )
{
// if( iType==1 && m_nUserNoticeNum!=num ){
// m_nUserNoticeNum = num;
//
// m_pbUserNoticeNum->Visible = (num>0);
// if( num>0 ){
// m_pbUserNoticeNum->Invalidate();
// }
//
// if( m_arrTabs[TAB_NT]->Down ){
// m_lblMsgNum->Caption = m_nUserNoticeNum;
//
// m_lblMsgHead->Visible = (num>0);
// m_lblMsgMiddle->Visible = (num>0);
// m_lblMsgNum->Visible = (num>0);
// m_lblMsgURL->Visible = (num>0);
// m_lblMsgTail->Visible = (num>0);
//
// m_PanelShow->InitialVars();
// }
// }
}
//---------------------------------------------------------------------------
int __fastcall THelpForm::GetNoticeNum( int iType )
{
if( iType!=0 )
return m_nUserNoticeNum;
return 0;
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::SetPage( int iPage )
{
for( int i=0; i<TAB_NUM; i++ ){
if( i==iPage ){
m_arrTabs[i]->Down = true;
m_arrTabs[i]->BringToFront();
}
else{
if( m_arrTabs[i]->Down )
m_arrTabs[i]->Down = false;
m_arrTabs[i]->SendToBack();
}
}
// m_pbUserNoticeNum->BringToFront();
if( iPage==TAB_NT ){
m_lblMsgNum->Caption = m_nUserNoticeNum;
}
else if( iPage==TAB_FB && ( m_memMsg->Text.IsEmpty()
|| m_memMsg->Font->Color==clGray )){
m_bMemoHint = true;
m_memMsg->Text = "请在此处输入您的问题";
m_memMsg->Font->Color = clGray;
}
m_lblMsgHead->Visible = (iPage==TAB_NT && m_nUserNoticeNum>0);
m_lblMsgMiddle->Visible = (iPage==TAB_NT && m_nUserNoticeNum>0);
m_lblMsgNum->Visible = (iPage==TAB_NT && m_nUserNoticeNum>0);
m_lblMsgURL->Visible = (iPage==TAB_NT && m_nUserNoticeNum>0);
m_lblMsgTail->Visible = (iPage==TAB_NT && m_nUserNoticeNum>0);
m_btnSubmit->Visible = (iPage==TAB_FB);
m_memMsg->Visible = (iPage==TAB_FB);
m_PanelShow->SetMode( iPage );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::NoticeNumPaint(TObject *Sender)
{
TPaintBox* pPB = (TPaintBox*)Sender;
String strText = IntToStr( m_nUserNoticeNum );
pPB->Canvas->Draw(0, 0, m_pImgNoticeTip);
pPB->Canvas->Brush->Style = bsClear;
pPB->Canvas->Font->Color = clWhite;
int txtWidth = pPB->Canvas->TextWidth( strText );
int txtHeight = pPB->Canvas->TextHeight( strText );
pPB->Canvas->TextOut( (pPB->Width - txtWidth)/2.0+0.5,
(pPB->Height -txtHeight)/2.0,
strText );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::TabClick(TObject *Sender)
{
int mode = ((TTabButton*)Sender)->Tag;
if(mode==TAB_SW){
PostMessage(Application->MainForm->Handle, UM_SHOWMORE, 0, 0);
}
else if(mode==TAB_MN){
PostMessage(Application->MainForm->Handle, UM_OPENMANUAL, 0, 0);
}
else if(mode==TAB_AB){
PostMessage(Application->MainForm->Handle, UM_SHOWABOUT, 0, 0);
}
else{
SetPage( mode );
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::UrlClick(TObject *Sender)
{
if( Sender==m_lblUrl && m_lblUrl->Caption.Length()>0 ){
ShellExecute(Handle,NULL, m_lblUrl->Caption.c_str(), NULL,NULL,SW_SHOWNORMAL);
}
else if( Sender==m_lblVideo ){
ShellExecute(Handle,NULL, L"http://v.qq.com/boke/page/t/8/p/t01266qkg8p.html",
NULL,NULL,SW_SHOWNORMAL);
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::SubmitClick(TObject *Sender)
{
TProgressForm *frmProgress = new TProgressForm(NULL);
int ret = frmProgress->User_SubmitQuestin( GBToUTF8(AnsiString(m_memMsg->Text.Trim().c_str()).c_str()).c_str() );
int eExtra = frmProgress->GetOpertaionResult();
delete frmProgress;
if( ret==mrOk && eExtra==0 ){
m_PanelShow->AddFeedback( m_memMsg->Text.Trim().c_str() );
m_memMsg->Text = "";
}
else if( eExtra!=0 && eExtra!=e_UserCanceled ){
MessageForm->ShowMessage( "由于网络故障,信息提交失败。\n\n请稍后重试!",
MB_ICONERROR|MB_OK );
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::MemoMsgChange(TObject *Sender)
{
//
if( !m_bMemoHint && !m_memMsg->Text.Trim().IsEmpty() ){
m_btnSubmit->Enabled = true;
}
else{
m_btnSubmit->Enabled = false;
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::MemoMsgClick(TObject *Sender)
{
//
if( m_bMemoHint ){
m_memMsg->Text = "";
m_memMsg->Font->Color = clBlack;
m_bMemoHint = false;
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::MsgURLClick(TObject *Sender)
{
char strURL[256];
f_CS_GetWebPageURL( URL_USERNOTICE, strURL );
ShellExecute(Handle, NULL, ((String)strURL).c_str(), NULL, NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
switch( Key ){
case VK_ESCAPE:
{
PostMessage( Application->MainForm->Handle, UM_SHOWHELP, false, 0 );
}
break;
}
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::WMNCLButtonDown(Winapi::Messages::TWMNCLButtonDown &Message)
{
if( Window_state==HLP_WINDOW_NORMAL )
TForm::Dispatch( &Message );
}
//---------------------------------------------------------------------------
void __fastcall THelpForm::GenerPanelMouseEnter(TObject *Sender)
{
THelpForm::SetFocus();
Screen->Cursor = crDefault;
}
//---------------------------------------------------------------------------