📄 fchildwin.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include "SNDKEY32.hpp"
#pragma hdrstop
#include "fChildwin.h"
#include "g_AppMaros.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma link "Psdk\\wininet.lib"
#pragma link "SNDKEY32.obj"
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
__fastcall TfmChildwin::TfmChildwin(TComponent* Owner)
: TForm(Owner)
{
IsClosing = false;
FProgressMax = 0;
FProgress = -1; // // =-1 表示进程条不可用
this->WindowState = wsMaximized;
// 向主窗口发送信息
MSGMDICREATE(this); // 要求建立Tab页
MSGMDIACTIVE(this); // 选择相应Tab页
}
//---------------------------------------------------------------------------
IHTMLWindow2 *TfmChildwin::GetHTMLWindow(void)
{
try
{
if(CppWebBrowser->ReadyState == ::READYSTATE_UNINITIALIZED
|| CppWebBrowser->ReadyState == ::READYSTATE_LOADING )
{
return NULL;
}
IDispatch * WebDocument = static_cast<IDispatch *>(CppWebBrowser->Document);
IHTMLDocument2 *HTMLDocument = static_cast<IHTMLDocument2 *>(WebDocument);
if(HTMLDocument)
{
IHTMLWindow2 * HTMLWindow;
HTMLDocument->get_parentWindow(&HTMLWindow);
return HTMLWindow;
}
}catch(...)
{
}
return NULL;
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::FormActivate(TObject *Sender)
{
// 设置控件的焦点
IHTMLWindow2 * HTMLWindow = GetHTMLWindow();
if(HTMLWindow)
{
HTMLWindow->focus();
}
MSGMDIACTIVE(this);
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::FormClose(TObject *Sender,
TCloseAction &Action)
{
if(CppWebBrowser->Busy)
{
CppWebBrowser->Stop();
}
//
IsClosing = true;
Action = caFree;
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::FormDestroy(TObject *Sender)
{
// 向主窗口发送信息,删除相应Tab页
MSGMDIDELETE(this);
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::CppWebBrowserBeforeNavigate2(
TObject *Sender, LPDISPATCH pDisp, Variant *URL, Variant *Flags,
Variant *TargetFrameName, Variant *PostData, Variant *Headers,
VARIANT_BOOL *Cancel)
{
if(IsClosing)return;
// 初始化
m_DownError = false;
FStatusText = "";
MSGSTATUSCHANGE(this,STATUSCHANGE_TITLE);
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::CppWebBrowserCommandStateChange(
TObject *Sender, long Command, VARIANT_BOOL Enable)
{
if(IsClosing)return;
switch(Command)
{
case ::CSC_NAVIGATEFORWARD:
{
FForwordEnabled = bool(Enable);
break;
}
case ::CSC_NAVIGATEBACK:
{
FBackEnabled = bool(Enable);
break;
}
}
MSGSTATUSCHANGE(this,STATUSCHANGE_COMMANDSTATUS);
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::CppWebBrowserDocumentComplete(
TObject *Sender, LPDISPATCH pDisp, Variant *URL)
{
if(IsClosing)return;
if(m_DownError)
FErrorText = "发生错误";
else
FErrorText = "完成";
if(!CppWebBrowser->LocationURL.IsEmpty())
{
if(FURL.Length() < 3 || (FURL[1] != '\\' && FURL[2] != ':'))
{
FURL = CppWebBrowser->LocationURL;
}
}
MSGDOCCOMPLETE(this);
MSGSTATUSCHANGE(this,STATUSCHANGE_URL);
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::CppWebBrowserDownloadBegin(
TObject *Sender)
{
if(IsClosing)return;
FErrorText = "开始下载";
//
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::CppWebBrowserDownloadComplete(
TObject *Sender)
{
if(IsClosing)return;
FProgressMax = 0; // // =0 表示进程条不可用
FErrorText = "下载完成";
// 向主窗口发送消息,完成
MSGSTATUSCHANGE(this,STATUSCHANGE_COMPLETE);
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::CppWebBrowserNavigateComplete2(
TObject *Sender, LPDISPATCH pDisp, Variant *URL)
{
if(IsClosing)return;
// 网页下载成功
FErrorText = "地址已经找到";
m_DownError = false;
MSGSTATUSCHANGE(this,STATUSCHANGE_URL);
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::CppWebBrowserNavigateError(
TObject *Sender, LPDISPATCH pDisp, Variant *URL, Variant *Frame,
Variant *StatusCode, VARIANT_BOOL *Cancel)
{
if(IsClosing)return;
// 错误
FErrorText = "发生错误";
m_DownError = true;
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::CppWebBrowserNewWindow2(TObject *Sender,
LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel)
{
if(IsClosing)return;
//
TfmChildwin *fNew = CreateMDIChild();
fNew->CppWebBrowser->Offline = CppWebBrowser->Offline;
*ppDisp = fNew->CppWebBrowser->ControlInterface;
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::CppWebBrowserProgressChange(
TObject *Sender, long Progress, long ProgressMax)
{
if(IsClosing)return;
FProgressMax = ProgressMax; // =0表示进程条不可用
FProgress = Progress;
// 向主窗口发送消息,要求改变进程数据
MSGSTATUSCHANGE(this,STATUSCHANGE_PROGRESS);
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::CppWebBrowserStatusTextChange(
TObject *Sender, BSTR URL)
{
if(IsClosing)return;
FStatusText = URL;
MSGSTATUSCHANGE(this,STATUSCHANGE_STATUSTEXT);
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::CppWebBrowserTitleChange(
TObject *Sender, BSTR BTitle)
{
if(IsClosing)return;
FTitle = BTitle;
if(FTitle.IsEmpty())
{
FTitle = FURL;
}
Caption = FTitle;
MSGSTATUSCHANGE(this,STATUSCHANGE_TITLE);
}
//---------------------------------------------------------------------------
void TfmChildwin::NavigateURL(AnsiString URL)
{
Caption = URL;
FTitle = URL;
TVariant V = URL;
FURL = URL;
CppWebBrowser->Navigate2(&V);
}
//---------------------------------------------------------------------------
bool TfmChildwin::CommandSupported(Shdocvw_tlb::OLECMDID cmdID)
{
Shdocvw_tlb::OLECMDF S = CppWebBrowser->QueryStatusWB(cmdID);
return (S & Shdocvw_tlb::OLECMDF_SUPPORTED);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -