我用Delphi做了一个ocx,里面有一个窗体,怎么用ASP调用它并显示出窗体来?另外怎么实现客户端网页打开后提示安装控件,ASP页面怎么获取OCX窗体编辑框里的值?
------解决方案--------------------
学习...
参考:
用ocx和asp开发internet应用
在internet上开发应用系统是目前比较流行的一种方法。一般都用html设计用户界面,用asp代码在服务器端实现数据的写入、读取等功能。但具体应用中往往用户端的界面比较复杂,并且用户录入的数据也要求先进行一些验证等预处理,用html固有的元素实现用户端的数据录入不能完全满足要求。我们如果用ocx控件设计用户界面,把ocx控件置于html中,再结合asp代码实现这类应用的开发是解决这一问题的一种方法。
ocx控件中数据怎样提交给asp代码
我们知道,html的form中有submit方法,调用该方法将把form中的数据提交到指定的asp,然而,submit只能把html中固有元素(如html中标志为input type=″text″的文本框)的数据提交,如果form中有ocx控件,ocx控件中的数据并不会被提交,而且,调用submit方法后,当前页将会刷新,ocx控件也会重新初始化,ocx控件的录入界面中的数据也全会置空。我们可以这样解决这些问题:
1.设计ocx控件时,在该控件中增加一个类型为string的属性,例如,我们命名它为strsenddata,该属性中放置要提交给asp代码的用户录入数据。
2.增加一个自定义事件(event),我们取名为evsend,如果把该ocx控件置入html页中,我们用frontpage可以看到ocx控件新增的属性strsenddata和事件evsend。如果要把ocx控件录入界面中的数据提交给asp代码,ocx控件可以先把控件录入界面中的数据形成一个字符串赋值给新增的属性strsenddata,然后ocx控件中用语句raiseevent evsend来激发事件evsend,放置该控件的html页收到这个消息后,取出该控件的属性strsenddata中的数据,再将它提交(submit)给asp代码。为防止ocx控件在数据提交后重新初始化(录入界面中的数据项目置空),我们可用frontpage设计一个有两页的frameset:一页放置ocx控件,另一页专门提交(submit),这样,提交时,放置ocx控件的一页不会被刷新,刷新的只是提交的那一页。
asp代码形成的数据怎样传回给ocx控件
我们在ocx控件中,再增加一个类型为string的属性strbackdata,strbackdata中放置asp返回的数据。上面我们说过,frameset中由一页专门提交数据,asp将结果传回这页后,由该页把结果赋值给ocx控件的属性strbackdata,那么ocx控件怎么及时处理strbackdata的数据并把它显示出来呢?我们分析ocx控件代码发现,在增加属性strbackdata后,vb自动形成了两个属性过程:public property let strbackdata(byvalnew―backflag as string)和public property get strbackdata()as string,其中,在属性strbackdata被赋值的时候,ocx控件将自动执行public property let strbackdata(byval new-backflag as string)过程。我们遇到的问题便迎刃而解:在public property let strbackdata(byval new―backflag as string)过程中放置我们对返回的数据进行处理的代码。
采取一些编程技巧,实现ocx控件和asp之间的数据交换,这种基于http协议的数据交换也有一定限制,比如:每次交换的数据长度不能超过64kb,如果有这种情况,需要用更多的编程方法实现,其它涉及到的关于cab包的制作等等在此不多赘述。
------解决方案--------------------
如果你的OCX正常运行了的话,那你弹出基于对话框的窗体肯定是可以的,具体怎么做,一句话两句话搞不定的。建议你看看关于ATL文面的书,在网上搜搜。