当前位置: 代码迷 >> PB >> PB + OLE (dsoframer)打开excel文件后,能挡住其它已打开的excel窗口,求ole独立excel窗口的方法
  详细解决方案

PB + OLE (dsoframer)打开excel文件后,能挡住其它已打开的excel窗口,求ole独立excel窗口的方法

热度:780   发布时间:2016-04-29 05:15:21.0
PB + OLE (dsoframer)打开excel文件后,会挡住其它已打开的excel窗口,求ole独立excel窗口的方法
我最近找到dsoframer这个oxc,
目前可以顺利的让用户在PB设计的界面中直接编辑excel文件,但用户打开这个界面后,其它之前用原版office打开的excel窗口,就不能显示,要关闭了PB+ole的窗口,其它excel才能显示。

我试用ole_1.object.activate(offside!), 但提示不支持。
用browser想去浏览这个dsoframer的属性,PB12.5.2就会崩溃。
但是,如用visual basice6+dsoframer, 就不会出现这种情况。各自excel都能独立运行。

我是这样写的:
oleobject ds
ds=ole_1.object
ds.application.open("1.xls",false,"excel.application")

请帮指点,谢谢!

------解决思路----------------------
关于 DSOFramer 控件的一些补充说明

注意:本文所指的 DSOFramer 控件是微软官方提供的,版本号为 1.3版。并且,由于缺少正式资料,下文提出的解决办法是凭测试得出的经验之谈,仅供大家参考。

(1)问题一:如果使用了控件默认的设置,启动了多个 DSOFramer 控件实例(不论它们是否都在 VFP 应用程序内部启动),并且都打开了 Office 文档(本文以 Excel 工作簿为例,下同),则仅有一个实例的文档能被正常访问。访问其他实例的文档时,会出现异常的现象,例如:Excel 编辑栏不能被访问、出现奇怪的界面元素、打开独立的 Excel 界面等。
(2)问题二:如果使用了控件默认的设置,即便只启动了 1 个 DSOFramer 控件实例,但焦点不能在 DSOFramer 控件与 VFP 自身的控件之间正常切换。

其实,在 1.3 版的 DSOFramer 控件中,提供了新属性 ActivationPolicy,它的取值如下:
0 (0x0000): 默认行为(枚举dsoDefaultBehavior)
1 (0x0001): 当应用程序未激活时,保持 UI 活动(枚举dsoKeepUIActiveOnAppDeactive)
2 (0x0010): 当失去焦点时,取消 Comp 激活(枚举dsoCompDeactivateOnLostFocus)
4 (0x0100): 当 Comp 未激活时,取消 IP 激活(枚举dsoIPDeactivateOnCompDeactive)

3 (0x0011): 行为 1 + 2
5 (0x0101): 行为 1 + 4
6 (0x0110): 行为 2 + 4
7 (0x0111): 行为 1 + 2 + 4

经过测试,在 VFP 中设置 DsoFramer 控件的 ActivationPolicy 属性值为 6 时可以解决上述问题。当然,您也可以测试此属性值为 4、5、7 时的情况,似乎也能解决一些问题。
但重要的是,此属性的值应该在打开文档之前设置!如果文档已经打开,该属性值是只读的(设置了不起作用)。
如果需要启动多个 DSOFramer 控件实例,推荐把每个实例设置好 ActivationPolicy 属性值。

另一个重要的新属性则是 FrameHookPolicy,关于它的应用场景还需要大家探索。
  相关解决方案