在简单的页面中触发多个on_change事件没有问题,如果on_change需要取数据库信息的时候,只能触发第一个on_change事件,后面都无效!
请高手指教,还有网上有用fireEvent处理事件的,不知道可行否?
代码如下:
procedure ExtractLinks(WebBrowser: IWebBrowser2);
var
vFrame, ret: OleVariant;
ilFrameIndex, ilFramesCount: integer;
pDoc, HTMLDocument: IHTMLDocument2;
pWindow: IHTMLWindow2;
pFrames: IHTMLFramesCollection2;
spdisp:idispatch;
HtmlInputEle: IHTMLInputElement;
ev: IDispatch;
vi, vi2, vr: OleVariant;
dispparamsNoArgs: DISPPARAMS;
begin
if(SUCCEEDED(WebBrowser.Document.QueryInterface(
IID_IHTMLDocument2, HTMLDocument))) then
begin
pFrames:=(HTMLDocument.get_frames as IHTMLFramesCollection2);
ilFramesCount := pFrames.get_length;
TVariantArg(vFrame).vt := VT_UINT;
for ilFrameIndex := 1 to ilFramesCount - 1 do
begin
TVariantArg(vFrame).lVal := ilFrameIndex;
spDisp := pFrames.item(vFrame);
if (SUCCEEDED(spDisp.QueryInterface(IID_IHTMLWindow2, pWindow))) then
begin
pDoc := pWindow.get_document;
if pDoc.title = '数据录入' then
begin
HtmlInputEle:=(pDoc.all.item('test1',0) as IHTMLInputElement);
if HtmlInputEle <> nil then
begin
HtmlInputEle.select;
HtmlInputEle.value :='111';
vi2 := HtmlInputEle.get_onchange;
ev := IDispatch(vi2);
dispparamsNoArgs.rgvarg := nil;
dispparamsNoArgs.rgdispidNamedArgs := nil;
dispparamsNoArgs.cArgs := 0;
dispparamsNoArgs.cNamedArgs := 0;
ev.Invoke(
DISPID_VALUE,
GUID_NULL,
LOCALE_USER_DEFAULT,
DISPATCH_METHOD,
dispparamsNoArgs,
@vr,
nil,
nil);
end;
HtmlInputEle:=(pDoc.all.item('test2',0) as IHTMLInputElement);
if HtmlInputEle <> nil then
begin
HtmlInputEle.select;
HtmlInputEle.value :='222';
vi2 := HtmlInputEle.get_onchange;
ev := IDispatch(vi2);
dispparamsNoArgs.rgvarg := nil;
dispparamsNoArgs.rgdispidNamedArgs := nil;
dispparamsNoArgs.cArgs := 0;
dispparamsNoArgs.cNamedArgs := 0;
ev.Invoke(
DISPID_VALUE,
GUID_NULL,
LOCALE_USER_DEFAULT,
DISPATCH_METHOD,
dispparamsNoArgs,
@vr,
nil,
nil);
end;
end;
end;
end;
end;
end;
请高手指教,还有网上有用fireEvent处理事件的,不知道可行否?
代码如下:
procedure ExtractLinks(WebBrowser: IWebBrowser2);
var
vFrame, ret: OleVariant;
ilFrameIndex, ilFramesCount: integer;
pDoc, HTMLDocument: IHTMLDocument2;
pWindow: IHTMLWindow2;
pFrames: IHTMLFramesCollection2;
spdisp:idispatch;
HtmlInputEle: IHTMLInputElement;
ev: IDispatch;
vi, vi2, vr: OleVariant;
dispparamsNoArgs: DISPPARAMS;
begin
if(SUCCEEDED(WebBrowser.Document.QueryInterface(
IID_IHTMLDocument2, HTMLDocument))) then
begin
pFrames:=(HTMLDocument.get_frames as IHTMLFramesCollection2);
ilFramesCount := pFrames.get_length;
TVariantArg(vFrame).vt := VT_UINT;
for ilFrameIndex := 1 to ilFramesCount - 1 do
begin
TVariantArg(vFrame).lVal := ilFrameIndex;
spDisp := pFrames.item(vFrame);
if (SUCCEEDED(spDisp.QueryInterface(IID_IHTMLWindow2, pWindow))) then
begin
pDoc := pWindow.get_document;
if pDoc.title = '数据录入' then
begin
HtmlInputEle:=(pDoc.all.item('test1',0) as IHTMLInputElement);
if HtmlInputEle <> nil then
begin
HtmlInputEle.select;
HtmlInputEle.value :='111';
vi2 := HtmlInputEle.get_onchange;
ev := IDispatch(vi2);
dispparamsNoArgs.rgvarg := nil;
dispparamsNoArgs.rgdispidNamedArgs := nil;
dispparamsNoArgs.cArgs := 0;
dispparamsNoArgs.cNamedArgs := 0;
ev.Invoke(
DISPID_VALUE,
GUID_NULL,
LOCALE_USER_DEFAULT,
DISPATCH_METHOD,
dispparamsNoArgs,
@vr,
nil,
nil);
end;
HtmlInputEle:=(pDoc.all.item('test2',0) as IHTMLInputElement);
if HtmlInputEle <> nil then
begin
HtmlInputEle.select;
HtmlInputEle.value :='222';
vi2 := HtmlInputEle.get_onchange;
ev := IDispatch(vi2);
dispparamsNoArgs.rgvarg := nil;
dispparamsNoArgs.rgdispidNamedArgs := nil;
dispparamsNoArgs.cArgs := 0;
dispparamsNoArgs.cNamedArgs := 0;
ev.Invoke(
DISPID_VALUE,
GUID_NULL,
LOCALE_USER_DEFAULT,
DISPATCH_METHOD,
dispparamsNoArgs,
@vr,
nil,
nil);
end;
end;
end;
end;
end;
end;
procedure ExtractLinks2(WebBrowser: IWebBrowser2);
var
hdoc4: IHTMLDocument4;
heo: IHTMLEventObj;
hdoc2: IHTMLDocument2;
hec: IHTMLElementCollection;
disp: IDispatch;
he3: IHTMLElement3;
Caceled: WordBool;
ret, tmpvi: OleVariant;
begin
if(SUCCEEDED(WebBrowser.Document.QueryInterface(
IID_IHTMLDocument4, hdoc4))) then
begin
TVariantArg(ret).vt := VT_UINT;
TVariantArg(ret).lVal := 0;
heo := hdoc4.CreateEventObject(ret); if(SUCCEEDED(WebBrowser.Document.QueryInterface(
IID_IHTMLDocument2, hdoc2))) then
begin
hec := hdoc2.get_all;
disp := hec.item('txtjjhy', 0);
he3 := disp as IHTMLElement3; //用IHTMLElement3的fireEvent调用onchange
tmpvi := heo;
Caceled := he3.fireEvent('onchange',tmpvi);
end;
end;
end;