给个置顶得代码,VB得。楼主自己改成DELPHI吧 Option Explicit'使窗体永远置于最前面的代码Declare Function SetWindowPos& Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)Public Sub setFrmOnTop(hWnd As Long) On Error Resume Next Dim rtn rtn = SetWindowPos(hWnd, -1, 0, 0, 0, 0, 3) End SubPublic Sub setFrmNormal(hWnd As Long) On Error Resume Next Dim rtn rtn = SetWindowPos(hWnd, -2, 0, 0, 0, 0, 3) End Sub
you can work around this problem by hosting the control in an HTML Application
自己搞定,写出来,共享一下: 一、先将控件中要实现的功能在普通的工程中编写,并测试完毕; 二、加ActiveX外壳: 1、在File-New-Other-ActiveX页中新建一个ActiveX Libtary 工程,然后在相同的页中添加Automation Object; 2、在弹出的向导中,将CoClaee Name设为TEST(当然你也可以设为其它); 3、在随后的TLB设置中你能看到系统为你生成了一个接口(ITEST),当然你也可以改为其它名称; 4、在ITEST中你可以增删各种属性和方法;这和DELPHI的VCL控件开发没有什么区别;需要注意的是参数类型。字符串可以用BSTR,布尔可以用OLE_ENABLEDEFAULTBOOL,还要注意传入传出方式(IN 或OUT); 5、假设我们设置了一个RUN方法,是运行该控件窗体的。 至此,我们的ACTIVEX外壳已完成。 三、将窗体加入控件中: 在生成的主单元中,USE一下该窗体。随后在RUN的方法中加入: Form1:=TForm1.Create(nil); Form1.ShowModal; Form1.Free; 四、编译控件:选择Project-Compile Test; 五、发布控件:选择Run-Register ActiveX Server 六、测试控件:生成一个HTML文档 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <script> var Project1 = new ActiveXObject("Test.test"); Project1.run(); </script> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>无标题文档</title> </head> <body> </body> </html> 双击该文档,即可看到窗体被弹出。
我也遇到相同问题,但经过实验后发现Delphi在IE中也可以弹出模式窗口.设计ActiveFormX时我在普通工程中完成功能,然后引入到ActiveX项目中. 这时如果以前主窗体的visible属性为True的话,在Showmodal时就会产生'cannot make a visible window modal'. 所以: 只用将目标窗体的visible属性设为false就可以弹出模式窗口 :)
Option Explicit'使窗体永远置于最前面的代码Declare Function SetWindowPos& Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)Public Sub setFrmOnTop(hWnd As Long)
On Error Resume Next
Dim rtn
rtn = SetWindowPos(hWnd, -1, 0, 0, 0, 0, 3)
End SubPublic Sub setFrmNormal(hWnd As Long)
On Error Resume Next
Dim rtn
rtn = SetWindowPos(hWnd, -2, 0, 0, 0, 0, 3)
End Sub
一、先将控件中要实现的功能在普通的工程中编写,并测试完毕;
二、加ActiveX外壳:
1、在File-New-Other-ActiveX页中新建一个ActiveX Libtary 工程,然后在相同的页中添加Automation Object;
2、在弹出的向导中,将CoClaee Name设为TEST(当然你也可以设为其它);
3、在随后的TLB设置中你能看到系统为你生成了一个接口(ITEST),当然你也可以改为其它名称;
4、在ITEST中你可以增删各种属性和方法;这和DELPHI的VCL控件开发没有什么区别;需要注意的是参数类型。字符串可以用BSTR,布尔可以用OLE_ENABLEDEFAULTBOOL,还要注意传入传出方式(IN 或OUT);
5、假设我们设置了一个RUN方法,是运行该控件窗体的。
至此,我们的ACTIVEX外壳已完成。
三、将窗体加入控件中:
在生成的主单元中,USE一下该窗体。随后在RUN的方法中加入:
Form1:=TForm1.Create(nil);
Form1.ShowModal;
Form1.Free;
四、编译控件:选择Project-Compile Test;
五、发布控件:选择Run-Register ActiveX Server
六、测试控件:生成一个HTML文档
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<script>
var Project1 = new ActiveXObject("Test.test");
Project1.run();
</script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<body>
</body>
</html>
双击该文档,即可看到窗体被弹出。
这时如果以前主窗体的visible属性为True的话,在Showmodal时就会产生'cannot make a visible window modal'.
所以:
只用将目标窗体的visible属性设为false就可以弹出模式窗口 :)