Delphi 使用RAD Studio自动执行IHTMlement OnKeyUp事件

Delphi 使用RAD Studio自动执行IHTMlement OnKeyUp事件,delphi,internet-explorer,dom,automation,c++builder,Delphi,Internet Explorer,Dom,Automation,C++builder,我试图在下面概述的代码中触发OnKeyUp事件。因此,OnKeyUp事件将在我试图自动化的页面的HTML中触发一些javascript 我正在使用一个自动化的IE项目,使用RAD Studio XE6C++。我有一个元素需要触发OnKeyUp事件。但它不会触发javascript 我要自动执行的HTML代码是: 我目前使用的代码是 bool\uuu fastcall SessionData::UpdateValueByIDTest(字符串id,字符串值) { IHTMLDocument3*h

我试图在下面概述的代码中触发OnKeyUp事件。因此,OnKeyUp事件将在我试图自动化的页面的HTML中触发一些javascript

我正在使用一个自动化的IE项目,使用RAD Studio XE6C++。我有一个元素需要触发OnKeyUp事件。但它不会触发javascript

我要自动执行的HTML代码是:


我目前使用的代码是

bool\uuu fastcall SessionData::UpdateValueByIDTest(字符串id,字符串值)
{
IHTMLDocument3*htmldoc3;
标记变体键控;
HRESULT HRESULT;
if(成功(即->文档->查询接口(IID_IHTMLDocument3,(void**)和htmldoc3)))
{
IHTMLElement*htmlElement;
htmldoc3->getElementById(宽字符串(id).c_bstr(),&htmlElement);
如果(htmlElement)
{
//值更新为OK
htmlElement>setAttribute(宽字符串(“值”).c_bstr(),TVariant(值));
hresult=htmlElement->get_onkeyup(&keyup);
//期望它触发OnKeyUp事件,但它没有。
hresult=htmlElement->put_onkeypress(键向上);
返回true;
}
}
返回false;
}

您只需将现有的
OnKeyUp
事件处理程序重新分配回
OnKeyUp
事件。实际上,你根本不是在启动事件

在IE11之前,使用元素的方法

在IE11及更高版本中,您需要使用该方法

试着这样做:

#包括
bool\uuu fastcall SessionData::UpdateValueByIDTest(字符串id,字符串值)
{
TComInterface htmldoc3=ie->文档;
如果(htmldoc3)
{
TComInterface htmlElement;
if(成功(htmldoc3->getElementById(宽字符串(id).c_bstr(),&htmlElement)))
{
htmlElement->setAttribute(宽字符串(L“值”).c_bstr(),TVariant(值));
//触发OnKeyUp事件
TComInterface documentEvent=htmldoc3;
TComInterface eventTarget=htmlElement;
如果((documentEvent)和(eventTarget))
{
tMinterface eventObj;
if(成功(documentEvent->createEvent(宽字符串(L“KeyboardEvent”).c_bstr(),&eventObj)))
{
TComInterface keybdEvent=eventObj;
KeybEvent->initKeyboardEvent(宽字符串(L“keyup”).c_bstr(),VARIANT_TRUE,VARIANT_TRUE,NULL,宽字符串(L“”).c_bstr,DOM_KEY_LOCATION_STANDARD,宽字符串(L“”).c_str(),VARIANT_FALSE,宽字符串(L“en US”).c_str();
//根据需要设置其他事件属性。。。
VARIANT\u BOOL bPreventDefault=VARIANT\u FALSE;
eventTarget->dispatchEvent(eventObj和bPreventDefault);
}
}
其他的
{
TComInterface htmldoc4=ie->文档;
TComInterface htmlElement3=htmlElement;
if(htmldoc4和HTMLLEMENT3)
{
变空;
tMinterface eventObj;
if(成功(htmldoc4->createEventObject(&empty,&eventObj)))
{
eventObj->put_keyCode();
//根据需要设置其他事件属性。。。
VARIANT_BOOL b取消=VARIANT_FALSE;
htmlElement3->fireEvent(宽字符串(L“onkeyup”).c_bstr(),TVariant(eventObj),&b已取消);
}
}
}
返回true;
}
}
返回false;
}

你的问题是什么?有什么东西在起作用吗?我不知道你在这里是什么意思?我刚刚在stackoverflow上发布了我的第一个问题,正在等待回复。请澄清您需要帮助的内容。到目前为止,你还没有写一个实际的问题,你只是写了一堆事实。真正的问题在哪里?你需要帮助做什么?你需要更加清楚。