📄 browserpage.cpp
字号:
if(ClickedTab == -1)
return;
// always keep one tab around
if(TabControl->Tabs->Count == 1)
NavigateToHome();
else
CloseTab(ClickedTab);
}
void __fastcall TBrowserForm::CloseAllOtherTabsMnuClick(TObject *Sender)
{
TPoint ClickPoint = TabControl->ScreenToClient(TabPopupMenu->PopupPoint);
int ClickedTab = TabControl->IndexOfTabAt(ClickPoint.x,ClickPoint.y);
if(ClickedTab != -1)
CloseAllOtherTabs(ClickedTab);
}
//---------------------------------------------------------------------------
void __fastcall TBrowserForm::BackBtnClick(TObject *Sender)
{
if(GetActiveBrowser())
GetActiveBrowser()->GoBack();
}
void __fastcall TBrowserForm::ForwardBtnClick(TObject *Sender)
{
if(GetActiveBrowser())
GetActiveBrowser()->GoForward();
}
void __fastcall TBrowserForm::RefreshBtnClick(TObject *Sender)
{
if(GetActiveBrowser())
GetActiveBrowser()->Refresh2(0);
}
void __fastcall TBrowserForm::StopBtnClick(TObject *Sender)
{
if(GetActiveBrowser())
GetActiveBrowser()->Stop();
}
//---------------------------------------------------------------------------
void __fastcall TBrowserForm::HomeBtnClick(TObject *Sender)
{
NavigateToHome();
}
//---------------------------------------------------------------------------
void __fastcall TBrowserForm::UrlEditKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
// go to url if <return> is hit
if(Key == VK_RETURN) {
Key = 0; // does _not_ prevent return from showing up in OnKeyPress
if(Shift.Contains(ssShift))
NewTabBtnClick(NULL);
else
GoBtnClick(NULL);
}
}
void __fastcall TBrowserForm::UrlEditKeyPress(TObject *Sender, char &Key)
{
// don't send return to edit
if(Key == 13)
Key = 0;
}
void __fastcall TBrowserForm::GoBtnClick(TObject *Sender)
{
string NewUrl = UrlEdit->Text.c_str();
// google goodness
if(NewUrl.substr(0,2) == "g ") {
NewUrl = string("http://www.google.com/search?q=") +
UrlEncode(NewUrl.substr(2));
UrlEdit->Text = NewUrl.c_str();
}
// navigate to url
NavigateTo(UrlEdit->Text.c_str(),false);
}
void __fastcall TBrowserForm::NewTabBtnClick(TObject *Sender)
{
string NewUrl = UrlEdit->Text.c_str();
// google goodness
if(NewUrl.substr(0,2) == "g ") {
NewUrl = string("http://www.google.com/search?q=") +
UrlEncode(NewUrl.substr(2));
UrlEdit->Text = NewUrl.c_str();
}
// navigate to url
NavigateTo(UrlEdit->Text.c_str(),true);
}
//---------------------------------------------------------------------------
void __fastcall TBrowserForm::BookmarkBtnClick(TObject *Sender)
{
// create new menu with default items
delete BookmarkPopup;
BookmarkPopup = new TPopupMenu(this);
BookmarkPopup->Items->AutoLineReduction = maManual;
TMenuItem* AddItem = new TMenuItem(BookmarkPopup);
// TRANSLATOR: Menu item in browser bookmark menu
AddItem->Caption = _("Add Active Page");
AddItem->Enabled = GetActiveBrowser() != NULL;
AddItem->OnClick = AddBookmarkMnuClick;
BookmarkPopup->Items->Add(AddItem);
TMenuItem* RemoveItem = new TMenuItem(BookmarkPopup);
// TRANSLATOR: Menu item in browser bookmark menu
RemoveItem->Caption = _("Remove Bookmark");
BookmarkPopup->Items->Add(RemoveItem);
// separator
TMenuItem* SepItem = new TMenuItem(BookmarkPopup);
SepItem->Caption = "-";
BookmarkPopup->Items->Add(SepItem);
// add bookmarks
for(TBookmarkManager::Iterator itr = Bookmarks->Begin(); itr != Bookmarks->End(); ++itr) {
// add launch item
TMenuItem* Item = new TMenuItem(BookmarkPopup);
Item->Caption = (*itr)->GetTitle() != "" ? (*itr)->GetTitle().c_str() : (*itr)->GetUrl().c_str();
Item->OnClick = LaunchBookmarkMnuClick;
Item->Tag = (int)(*itr);
BookmarkPopup->Items->Add(Item);
// add remove item
Item = new TMenuItem(BookmarkPopup);
Item->Caption = (*itr)->GetTitle() != "" ? (*itr)->GetTitle().c_str() : (*itr)->GetUrl().c_str();
Item->OnClick = RemoveBookmarkMnuClick;
Item->Tag = (int)(*itr);
RemoveItem->Add(Item);
}
TPoint Pt = BookmarkBtn->Parent->ClientToScreen(TPoint(BookmarkBtn->Left,BookmarkBtn->Top+BookmarkBtn->Height));
BookmarkPopup->Popup(Pt.x,Pt.y);
}
void __fastcall TBrowserForm::LaunchBookmarkMnuClick(TObject *Sender)
{
TBookmark* Bookmark;
if((Bookmark = (TBookmark*)((TMenuItem*)Sender)->Tag))
NavigateTo(Bookmark->GetUrl(),Config->GetValueInt("browser/open_bookmarks_in_new_tab"));
}
void __fastcall TBrowserForm::RemoveBookmarkMnuClick(TObject *Sender)
{
TBookmark* Bookmark;
if((Bookmark = (TBookmark*)((TMenuItem*)Sender)->Tag))
Bookmarks->Delete(Bookmark);
}
void __fastcall TBrowserForm::AddBookmarkMnuClick(TObject *Sender)
{
if(!GetActiveBrowser())
return;
AnsiString Url = GetActiveBrowser()->LocationURL;
AnsiString Title = AnsiString(GetActiveBrowser()->LocationName).Trim();
if(Title.Length() == 0)
Title = Url;
Bookmarks->Add(Url.c_str(),Title.c_str());
}
//---------------------------------------------------------------------------
void __fastcall TBrowserForm::BrowserTitleChange(TObject *Sender,
BSTR Title)
{
TCppWebBrowser* Browser = (TCppWebBrowser*)Sender;
for(int i=0; i<TabControl->Tabs->Count; i++) {
TBrowserWrapper* Wrapper = (TBrowserWrapper*)TabControl->Tabs->Objects[i];
if(Wrapper->GetBrowser() == Browser) {
SetTabCaption(i,AnsiString(Title).Trim());
break;
}
}
if (Browser == GetActiveBrowser())
UrlEdit->Text = Browser->LocationURL;
}
void __fastcall TBrowserForm::BrowserStatusTextChange(TObject *Sender,
BSTR StatusText)
{
TCppWebBrowser* Browser = (TCppWebBrowser*)Sender;
// show status text
if (Browser == GetActiveBrowser())
MainForm->MainStatusBar->Panels->Items[1]->Text = WideString(StatusText);
}
void __fastcall TBrowserForm::BrowserCommandStateChange(TObject *Sender,
long Command, VARIANT_BOOL Enable)
{
TCppWebBrowser* Browser = (TCppWebBrowser*)Sender;
switch(Command) {
case CSC_UPDATECOMMANDS:
// this seems not to be triggered if the browser window does not have
// focus meaning Browser->Budy == false is never detected?
if (Browser == GetActiveBrowser()) {
StopBtn->Enabled = Browser->Busy;
StatusAnimate->Visible = Browser->Busy;
StatusAnimate->Active = Browser->Busy;
PopupImage->Visible = !Browser->Busy && ((int)Browser->GetProperty(WideString("browser_blocked"))) > 0;
if(Browser->Busy)
StatusAnimate->BringToFront();
else
PopupImage->BringToFront();
}
break;
case CSC_NAVIGATEFORWARD:
Browser->PutProperty(WideString("browser_navigateforward"), TVariant(Enable));
if (Browser == GetActiveBrowser())
ForwardBtn->Enabled = Enable;
break;
case CSC_NAVIGATEBACK:
Browser->PutProperty(WideString("browser_navigateback"), TVariant(Enable));
if (Browser == GetActiveBrowser())
BackBtn->Enabled = Enable;
break;
}
}
void __fastcall TBrowserForm::BrowserProgressChange(TObject* Sender,
long Progress, long ProgressMax)
{
}
void __fastcall TBrowserForm::BrowserNavigateError(TObject *Sender,
LPDISPATCH pDisp, VARIANT *URL, VARIANT *Frame, VARIANT *StatusCode,
VARIANT_BOOL *Cancel)
{
// if we tried to load the start or home urls from the config fall back
// to the internal page
WideString WUrl = ((wchar_t*)TVariant(URL));
if(WUrl == WideString(Config->GetValue("browser/home_url").c_str()))
BrowserLoadResource((TCppWebBrowser*)Sender, "startpage_htm");
}
void __fastcall TBrowserForm::BrowserNewWindow2(TObject *Sender,
LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel)
{
// block popups
TCppWebBrowser* Browser = (TCppWebBrowser*)Sender;
if(Config->GetValueInt("browser/block_popups") &&
Browser->ReadyState != Shdocvw_tlb::READYSTATE_COMPLETE)
{
int Blocked = Browser->GetProperty(WideString("browser_blocked"));
Blocked++;
Browser->PutProperty(WideString("browser_blocked"), TVariant(Blocked));
if(Browser == GetActiveBrowser() && !Browser->Busy) {
PopupImage->Visible = Blocked > 0;
PopupImage->BringToFront();
}
*Cancel = true;
return;
}
if(Config->GetValueInt("browser/open_new_windows_as_tabs") &&
Config->GetValueInt("browser/enable_tabs"))
{
TBrowserWrapper* Wrapper = CreateTab(true);
Wrapper->GetBrowser()->RegisterAsBrowser = true;
*ppDisp = Wrapper->GetBrowser()->ControlInterface;
}
}
void __fastcall TBrowserForm::BrowserWindowClosing(TObject * Sender,
VARIANT_BOOL IsChildWindow, VARIANT_BOOL* Cancel)
{
// cancel automatic closing of all windows since there is no clean way for
// us to handle it
*Cancel = true;
}
void __fastcall TBrowserForm::BrowserBeforeNavigate2(TObject *Sender,
LPDISPATCH pDisp, VARIANT *URL, VARIANT *Flags,
VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers,
VARIANT_BOOL *Cancel)
{
// reset popup count
TCppWebBrowser* Browser = (TCppWebBrowser*)Sender;
Browser->PutProperty(WideString("browser_blocked"), TVariant(((int)0)));
// handle magnet uris
if(!HandleMagnets)
return;
WideString WUrl = (wchar_t*)TVariant(URL);
WideString WProto = WUrl.SubString(0,7);
if(WProto == WideString(L"magnet:") || WProto == WideString(L"sig2dat")) {
TMagnetForm* MagnetDlg = new TMagnetForm(this,AnsiString(WUrl).c_str());
MagnetDlg->ShowModal();
delete MagnetDlg;
*Cancel = true;
}
}
void __fastcall TBrowserForm::BrowserDocumentComplete(TObject *Sender,
IDispatch *pDisp, VARIANT *URL)
{
#if 0
TCppWebBrowser* Browser = (TCppWebBrowser*)Sender;
if (pDisp == Browser->DefaultDispatch && MainForm->GetVisiblePage() == this) {
Browser->SetFocus();
BrowserCallScript(Browser, "KCeasyFocusSearch");
}
#endif
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -