怎样触发CppWebBrowser1的IHTMLSelectElement元素的Onchange事件?

csdnstudyc 2007-05-24 05:43:48
如题?
...全文
1145 18 打赏 收藏 转发到动态 举报
写回复
用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() 函数好象不行?

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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