社区
网络及通讯开发
帖子详情
怎样触发CppWebBrowser1的IHTMLSelectElement元素的Onchange事件?
csdnstudyc
2007-05-24 05:43:48
如题?
...全文
1145
18
打赏
收藏
怎样触发CppWebBrowser1的IHTMLSelectElement元素的Onchange事件?
如题?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
songzm
2008-04-16
打赏
举报
回复
我现在在做一个程序也是遇到相同的问题。一开始就看到这个帖子,但觉得应该不需要用到fireEvent的。如果非要这样才能解决问题,岂不说明get_onchange本身就存在bug?!后来花了几天时间,找了很多资料。今晚终于找到一篇国外的帖子,也是相同的问题。但解决办法却是非常简单。试了一下,问题终于解决!
其实“毛毛”的代码基本没错,之所以不行,我觉得问题应该出在hes的付值上:
DelphiInterface <IHTMLSelectElement> hse=disp;
我用的是下面这种方式,后面的代码完全一样,问题解决。
IHTMLSelectElement *hse;
disp->QueryInterface(IID_IHTMLSelectElement,(void**)&hse));
dlx_gd727000
2008-01-10
打赏
举报
回复
毛毛你好,我不想安装vc7,能发一个mshtml.h给我吗?dlx_gd@hotmail.com
先谢谢你。
蒋晟
2007-05-27
打赏
举报
回复
fireEvent我试过是可以的啊
Waiting4you
2007-05-27
打赏
举报
回复
这个功能HTML里加段小脚本就可以了呀? 你需要C++做什么工作?
Waiting4you
2007-05-26
打赏
举报
回复
直接用我上面的代码可以吗?
我看了一下mshtml.h,它里面又包含了一大堆其它的头文件, 那些又包含了...
偶先发给你mshtml.h
csdnstudyc
2007-05-26
打赏
举报
回复
谢谢毛毛,上面的程序试过,没有达到我想要的效果,我主要想在自己的程序中,自动实现:在html 中,有省->地区->城市,选择省份时,地区下拉框内自动显示出该省份的地区内容.将你的程序加在我自己的程序中处理了一下,好象没有反应....谢谢!你的邮件我收到了!
csdnstudyc
2007-05-25
打赏
举报
回复
毛毛发给我吧,在Ms上下了几个不能用,mailmng@sohu.com
Waiting4you
2007-05-25
打赏
举报
回复
偶是用BCB2006试验的, 不知道是不是BCB6里还没更新? 下面是IHTMLDocument4 的定义,不知道有没有用,或者直接到哪里去copy一个BCB2006的mshtml.h过来试试
#ifndef __IHTMLDocument4_INTERFACE_DEFINED__
#define __IHTMLDocument4_INTERFACE_DEFINED__
/* interface IHTMLDocument4 */
/* [object][uuid][dual][oleautomation] */
EXTERN_C const IID IID_IHTMLDocument4;
MIDL_INTERFACE("3050f69a-98b5-11cf-bb82-00aa00bdce0b")
IHTMLDocument4 : public IDispatch
{
public:
virtual /* [id] */ HRESULT STDMETHODCALLTYPE focus( void) = 0;
virtual /* [id] */ HRESULT STDMETHODCALLTYPE hasFocus(
/* [out][retval] */ VARIANT_BOOL *pfFocus) = 0;
virtual /* [bindable][displaybind][id][propput] */ HRESULT STDMETHODCALLTYPE put_onselectionchange(
/* [in] */ VARIANT v) = 0;
virtual /* [bindable][displaybind][id][propget] */ HRESULT STDMETHODCALLTYPE get_onselectionchange(
/* [out][retval] */ VARIANT *p) = 0;
virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_namespaces(
/* [out][retval] */ IDispatch **p) = 0;
virtual /* [id] */ HRESULT STDMETHODCALLTYPE createDocumentFromUrl(
/* [in] */ BSTR bstrUrl,
/* [in] */ BSTR bstrOptions,
/* [out][retval] */ IHTMLDocument2 **newDoc) = 0;
virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_media(
/* [in] */ BSTR v) = 0;
virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_media(
/* [out][retval] */ BSTR *p) = 0;
virtual /* [id] */ HRESULT STDMETHODCALLTYPE createEventObject(
/* [in][optional] */ VARIANT *pvarEventObject,
/* [out][retval] */ IHTMLEventObj **ppEventObj) = 0;
virtual /* [id] */ HRESULT STDMETHODCALLTYPE fireEvent(
/* [in] */ BSTR bstrEventName,
/* [in][optional] */ VARIANT *pvarEventObject,
/* [out][retval] */ VARIANT_BOOL *pfCancelled) = 0;
virtual /* [id] */ HRESULT STDMETHODCALLTYPE createRenderStyle(
/* [in] */ BSTR v,
/* [out][retval] */ IHTMLRenderStyle **ppIHTMLRenderStyle) = 0;
virtual /* [bindable][displaybind][id][propput] */ HRESULT STDMETHODCALLTYPE put_oncontrolselect(
/* [in] */ VARIANT v) = 0;
virtual /* [bindable][displaybind][id][propget] */ HRESULT STDMETHODCALLTYPE get_oncontrolselect(
/* [out][retval] */ VARIANT *p) = 0;
virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_URLUnencoded(
/* [out][retval] */ BSTR *p) = 0;
};
/* [id] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_focus_Proxy(
IHTMLDocument4 * This);
void __RPC_STUB IHTMLDocument4_focus_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_hasFocus_Proxy(
IHTMLDocument4 * This,
/* [out][retval] */ VARIANT_BOOL *pfFocus);
void __RPC_STUB IHTMLDocument4_hasFocus_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [bindable][displaybind][id][propput] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_put_onselectionchange_Proxy(
IHTMLDocument4 * This,
/* [in] */ VARIANT v);
void __RPC_STUB IHTMLDocument4_put_onselectionchange_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [bindable][displaybind][id][propget] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_get_onselectionchange_Proxy(
IHTMLDocument4 * This,
/* [out][retval] */ VARIANT *p);
void __RPC_STUB IHTMLDocument4_get_onselectionchange_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id][propget] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_get_namespaces_Proxy(
IHTMLDocument4 * This,
/* [out][retval] */ IDispatch **p);
void __RPC_STUB IHTMLDocument4_get_namespaces_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_createDocumentFromUrl_Proxy(
IHTMLDocument4 * This,
/* [in] */ BSTR bstrUrl,
/* [in] */ BSTR bstrOptions,
/* [out][retval] */ IHTMLDocument2 **newDoc);
void __RPC_STUB IHTMLDocument4_createDocumentFromUrl_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id][propput] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_put_media_Proxy(
IHTMLDocument4 * This,
/* [in] */ BSTR v);
void __RPC_STUB IHTMLDocument4_put_media_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id][propget] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_get_media_Proxy(
IHTMLDocument4 * This,
/* [out][retval] */ BSTR *p);
void __RPC_STUB IHTMLDocument4_get_media_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_createEventObject_Proxy(
IHTMLDocument4 * This,
/* [in][optional] */ VARIANT *pvarEventObject,
/* [out][retval] */ IHTMLEventObj **ppEventObj);
void __RPC_STUB IHTMLDocument4_createEventObject_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_fireEvent_Proxy(
IHTMLDocument4 * This,
/* [in] */ BSTR bstrEventName,
/* [in][optional] */ VARIANT *pvarEventObject,
/* [out][retval] */ VARIANT_BOOL *pfCancelled);
void __RPC_STUB IHTMLDocument4_fireEvent_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_createRenderStyle_Proxy(
IHTMLDocument4 * This,
/* [in] */ BSTR v,
/* [out][retval] */ IHTMLRenderStyle **ppIHTMLRenderStyle);
void __RPC_STUB IHTMLDocument4_createRenderStyle_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [bindable][displaybind][id][propput] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_put_oncontrolselect_Proxy(
IHTMLDocument4 * This,
/* [in] */ VARIANT v);
void __RPC_STUB IHTMLDocument4_put_oncontrolselect_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [bindable][displaybind][id][propget] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_get_oncontrolselect_Proxy(
IHTMLDocument4 * This,
/* [out][retval] */ VARIANT *p);
void __RPC_STUB IHTMLDocument4_get_oncontrolselect_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id][propget] */ HRESULT STDMETHODCALLTYPE IHTMLDocument4_get_URLUnencoded_Proxy(
IHTMLDocument4 * This,
/* [out][retval] */ BSTR *p);
void __RPC_STUB IHTMLDocument4_get_URLUnencoded_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
#endif /* __IHTMLDocument4_INTERFACE_DEFINED__ */
Waiting4you
2007-05-25
打赏
举报
回复
#include <mshtml.h>
csdnstudyc
2007-05-25
打赏
举报
回复
BCB 提示 IHTMLDocument4 没有定义?
Waiting4you
2007-05-25
打赏
举报
回复
一发贴突然发现偶两星啦,去散分先:)
Waiting4you
2007-05-25
打赏
举报
回复
还是jiangsheng(蒋晟.Net[MVP]) 的方法完美,可怜了我的第一段代码,花了偶足两小时才搞出来的:-P
下面这个是按jiangsheng(蒋晟.Net[MVP]) 大大 提示的方法做的(BCB做这个真是不好玩,不知道哪位大侠能不能指点一下怎么简化C++里的COM操作), 自己先收藏,呵呵
//搞定IHTMLEventObj
DelphiInterface<IHTMLDocument4> hdoc4(CppWebBrowser1->Document);
if(!hdoc4) return;
DelphiInterface<IHTMLEventObj> heo;
hdoc4->createEventObject(NULL,&heo);
if(!heo) return;
//找到selTest控件
DelphiInterface<IHTMLDocument2> hdoc2(CppWebBrowser1->Document);
if(!hdoc2) return;
DelphiInterface<IHTMLElementCollection> hec;
hdoc2->get_all(&hec);
if(!hec) return;
DelphiInterface<IDispatch> disp;
hec->item(TVariant(L"selTest"),TVariant(0),&disp);
if(!disp) return;
//搞定IHTMLElement3
DelphiInterface<IHTMLElement3> he3(disp);
if(!he3) return;
//用IHTMLElement3的fireEvent调用onchange
VARIANT_BOOL Caceled;
TVariant tmpvi(heo);
he3->fireEvent(L"onchange",&tmpvi,&Caceled);
csdnstudyc
2007-05-25
打赏
举报
回复
我用了毛毛的程序,简单的html可以实现,复杂的就不行了,jiangsheng有没有详细点的资料?用百度找了些资料不全.....急啊!
蒋晟
2007-05-25
打赏
举报
回复
document.createEventObject
element.fireEvent
csdnstudyc
2007-05-24
打赏
举报
回复
毛毛,如果onchange="alert('hello')"是未知的该如何处理? 这句话问错了!
csdnstudyc
2007-05-24
打赏
举报
回复
毛毛,如果onchange="alert('hello')"是未知的该如何处理?
Waiting4you
2007-05-24
打赏
举报
回复
实验代码:
<FORM>
<SELECT NAME=selTest onchange="alert('hello')">
<OPTION VALUE="Books">Books
<OPTION VALUE="Clothing">Clothing
<OPTION VALUE="Housewares">Housewares
</SELECT>
</FORM>
CppWebBrowser1载入上文后Button1Click 来调用selTest的onchange事件
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DelphiInterface<IHTMLDocument2> hdoc(CppWebBrowser1->Document);
DelphiInterface<IHTMLElementCollection> hec;
DelphiInterface<IDispatch> disp;
hdoc->get_all(&hec);
hec->item(TVariant(L"selTest"),TVariant(0),&disp);
if(disp)
{
TVariant vi;
DelphiInterface<IHTMLSelectElement> hse=disp;
hse->get_onchange(&vi);
DelphiInterface<IDispatch> ev((IDispatch *)vi);
DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
TVariant vr;
ev->Invoke(
DISPID_VALUE,
IID_NULL,
LOCALE_USER_DEFAULT,
DISPATCH_METHOD,
&dispparamsNoArgs, &vr, NULL, NULL);
}
}
csdnstudyc
2007-05-24
打赏
举报
回复
用 :lpSelectElement->get_onchange() 函数好象不行?
select
选择同一值
触发
onchange
事件
web
前端小问题,
select
选择
事件
,当选择
select
同一值
触发
onchange
事件
js
触发
select
onchange
事件
的小技巧
select
或text的
onchange
事件
需要手动改变
select
或text的值才能
触发
,下面有个不错的方法可以通过js
触发
select
onchange
事件
如何手动
触发
onchange
事件
?
问题描述: 在page1中:通过选择部分条件来控制page2中下拉框的值; page2中下拉框的选中值显示正确,但是没有
触发
在page2中下拉框值变化引起的其他dom
元素
的显示; 给下拉框添加了trigger('change')
事件
后,也没有起作用; 原因猜测: change只会在
元素
获得焦点时被
触发
,它的值在失去焦点时被改变。 解决方法: var e = new Event('change'); var el = document.get
Element
ById('tfa_83...
jQuery在用js改变
select
选中值的同时
触发
select
中的
onchange
事件
?
在开发项目时遇到了要用js改变
select
的选择值,在用js改变选中值时不能
触发
他的
onchange
事件
,从而在省市联动中没有得到想要的效果。百度很久发现jQuery中有一个trigger方法,这个trigger() 方法
触发
被选
元素
上指定的
事件
以及
事件
的默认行为。 说说我项目中用到的例子:在用js改变省份时,要联动更新市级的option数据 $("#area_provincenan")...
如何手动
触发
onchange
事件
? [重复]
This question already has an answer here: 这个问题已经在这里有了答案: How to trigger event in JavaScript
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章