TWebBrowser中 Enter 键无效问题

yctin 2007-08-17 02:42:06
TWebBrowser无法响应Enter键的问题已存在多年,但一直没有修正

现在我想做一个工具用来检视自己开发的B/S结构软件,这令到我不得不解决这个问题

需要做到程式内所有TWebBrowser都可以正确响应Enetr,包括动态创建的.
...全文
152 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yctin 2007-09-06
  • 打赏
  • 举报
回复
已经用 MS VC# 2005 Express 做完了,而且效果比BCB更好 ~_~

看着 BCB 跟 VS 的距离不断变大,真的很无奈...
daydayup234 2007-09-06
  • 打赏
  • 举报
回复
ccrun网上有

搜索时 加上ccrun
Waiting4you 2007-08-19
  • 打赏
  • 举报
回复
要是偶知道有简单方法偶出不拿出来吗? 呵呵. 看楼下有没有高手帮忙
yctin 2007-08-18
  • 打赏
  • 举报
回复
To : 毛毛

因为我要用 TC++ 编写,没有COM+元件可以使用 ~_~

我对TWebBrowser了解不多,有比较底层的方法吗?像SendMessage给TWebBrowser这样的方法有吗?


注:今天要去澳门工作,可能一两天不能回应
i_love_pc 2007-08-17
  • 打赏
  • 举报
回复
收藏!!
编译失败 2007-08-17
  • 打赏
  • 举报
回复
这倒是个好办法
Waiting4you 2007-08-17
  • 打赏
  • 举报
回复
偶以前代码里的(也是从网上抄来的),Form上放一个TApplicationEvents, OnMessage如下:
void __fastcall TfmMain::ApplicationEvents1Message(
tagMSG &Msg, bool &Handled)
{
static const char *web_browser_classname = "Internet Explorer_Server";
static int classname_len = strlen(web_browser_classname);
static char classname[MAX_PATH];

if(m_IsCloseAllNow)return; // 正在退出,不作处理
if(0 == this->MDIChildCount)return;
// 检查是否本窗口
HWND hParent;
HWND hWnd = GetParent(Msg.hwnd); // Shell DocObject_View
while(hWnd != NULL)
{
hParent = hWnd;
hWnd = GetParent(hParent);
}
if(hParent != Handle)
{
return;
}

TfmChildwin *fBrowser = GetActiveBrowserWindow();
if(fBrowser )
{
if(TabWindow->Handle == Msg.hwnd && WM_LBUTTONDBLCLK == Msg.message)
{
// TabControl控件的双击事件,关闭当前页面
Handled = true;
delete fBrowser;
return;
}

if(GetClassName(Msg.hwnd,classname,MAX_PATH) == classname_len)
{
// 判断是否TCppWebBrowser控件
if(0 == StrCmp(web_browser_classname,classname) && WM_KEYDOWN == Msg.message)
{
if(Msg.wParam == VK_RETURN)
{
if(!ComboBoxAddress->Focused())
{
// 处理回车键,模拟回车键
Handled=(IsDialogMessage(fBrowser->CppWebBrowser->Handle,&Msg));
if(Handled&&(!fBrowser->CppWebBrowser->Busy))
{
TComInterface<IOleInPlaceActiveObject> pOle(fBrowser->CppWebBrowser->Application);
if(pOle) pOle->TranslateAccelerator(&Msg);

}
return;
}
}else
if(Msg.wParam == VK_TAB)
{
if(this->MDIChildCount > 1)
{
int CtrlDown=GetKeyState(VK_CONTROL);
CtrlDown=CtrlDown&0x80;
if(CtrlDown)
{
int Indx = TabWindow->TabIndex + 1;
if (Indx >= TabWindow->Tabs->Count)
{
Indx = 0;
}
TabWindow->TabIndex = Indx;

Handled=true;
return;
}
}
}else
if(Msg.wParam == VK_ESCAPE)
{
if(ActionFullScreen->Checked)
{
ActionFullScreen->Checked = false;
SetFullScreen(false);
Handled=true;
return;
}
}
}
}
}
}

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧