关于activeform关闭IE窗体的问题?请各位同僚、大侠解答?(100分)

  • 主题发起人 主题发起人 linninbo
  • 开始时间 开始时间
L

linninbo

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个网页中通过js的“showModalDialog("Autograph.asp","","dialogWidth:530px;dialogHeight:440px" );”方式弹出一个网页,这个网页中包含有一个activeform,我想在activeform中可以关闭弹出的这个网页Autograph.asp,从而触发该页里面的window_onclose事件。
我用了好几个办法,关闭倒是可以关闭,但是连调用他的那个父页也关闭了,而我只想关闭弹出的这个页啊。
 
没人回答么,自己顶.
 
没有接触过,帮你顶顶。
 
to linninbo
请问你找到好的方法关闭IE窗口了没有,因为我也需要这要的功能,如果你研究出来了,烦你不吝告诉我解决办法好吗?
谢谢,很急哦!
 
var
FWindow: OleVariant;
FDocument: OleVariant;

procedure TRMWebReportViewer.Init(aWindow, aDocument: OleVariant);
begin
FWindow := aWindow;
FDocument := aDocument;
end;

procedure TRMWebReportViewer.btnExitClick(Sender: TObject);
begin
if VarType(FWindow) = varDispatch then
FWindow.Close;
end;

在网页中调用时只要初始化一下即可
<SCRIPT LANGUAGE="JavaScript">
document.all("MyViewer").Init(window, document);
</SCRIPT>
 
var
Window: IHTMLWindow2;
begin
with ActiveFormControl.ClientSite as IServiceProvider do
begin
if QueryService(IHTMLWindow2,IID_IHTMLWindow2,Window) = S_OK then
Window.close();
end
end;
 
to pihome,
你的方法可行吗?
为什么我编译的时候出现 Undeclared identifier: 'IHTMLWindow2'的错误,这是为什么?
盼复!
 
uses
MSHTML;
 
pihome
我把Activex放在一个单独的页面中,确实可以关闭IE,但如果我采用showModalDialog("Autograph.asp","","dialogWidth:530px;dialogHeight:440px" );”方式弹出这个网页时,它就不能关闭了,好奇怪!
你能帮帮我吗?谢谢你!
 
从ActiveForm中关闭IE的几个方法:

1,上面已经说了:
uses
MSHTML;

var
Window: IHTMLWindow2;
begin
with ActiveFormControl.ClientSite as IServiceProvider do
if QueryService(IHTMLWindow2,IID_IHTMLWindow2,Window) = S_OK then
Window.close();
end;

2,
uses
ShDocVw;

var
Browser: IWebBrowser2;
begin
with ActiveFormControl.ClientSite as IServiceProvider do
if QueryService(IWebbrowserApp,IWebbrowser2,Browser) = S_OK then
Browser.Quit;
end;

3,
var
h, p: HWND;
begin
p := Handle;
repeat
h := p;
p := GetParent(p);
until p <> 0;

PostMessage(h, WM_CLOSE, 0, 0);
end;
 
不行,窗口是能关闭但是不能返回值啊!
 
试过了,下面的方法是可行的:
var
Window: IHTMLWindow2;
w: OleVariant;
begin
with ActiveFormControl.ClientSite as IServiceProvider do
if QueryService(IHTMLWindow2,IID_IHTMLWindow2,Window) = S_OK then
begin
w := Window;
try
w.ReturnValue := '返回值';
except
end;
w.close;
end;
end;
 
pihome不好意思,我将我的源码都给你,你帮我调试一下行吗?
main.jsp
<html><head><script language="javascript">
function getValue(){
var aa = window.showModalDialog('callReturnValue.jsp','sdfsd','');
document.form1.text1.value = aa;}
</script>
</head><body>
<form name="form1">
<input type="text" name="text1" >
<input type="button" name="button1" onClick="getValue()" value="test">
</form></body></html>

callReturnValue.jsp
<%@page language="java" contentType="text/html;charset=GBK"%>
<html>
<head>
<script language="javascript">
function myMsg(){
alert("axl.caption:"+Ax1.Caption);
window.returnValue=Ax1.Caption;
window.close();
}
</script>
</head>
<body onunload="myMsg()" >
<OBJECT
classid="clsid:5A39703A-EEA2-492A-9EA6-6213843FAC26"
id="Ax1"
width=700
height=400
align=center
hspace=0
vspace=0
>
</OBJECT>
</body>
</html>

在控件里边,我放置了一个DBGrid控件单击一个格子就将值放到caption属性中,然后再用Ax1.Caption也可以取得,只差将值送到main.jsp中的text1中了。
谢谢你帮帮我,不好意思总是麻烦你,但我确实很急!
 
按我 ID:2302061 的代码套进去就可以了
if QueryService(IHTMLWindow2,IID_IHTMLWindow2,Window) = S_OK then
begin
w := Window;
到这里就可以像js中的window.xxx一样来写了 >> w.xxx
 
我的窗口用window.showModalDialog的方式打开的,
用你所有的方法都不可以关闭
用window.open()就可以关,
 
前人已有解答,现照搬如下:
有一个最简单的方法,加一个按钮,然后在事件中写入一句话:
HALT;
保你成功,不过,它只是非正常退出,你要是需要正常退出来传值的话,就不行了。
何不试试?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
503
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部