OLE时,能不能不让嵌入的工具条乱跑?(100分)

  • 主题发起人 主题发起人 杨深
  • 开始时间 开始时间

杨深

Unregistered / Unconfirmed
GUEST, unregistred user!
能不能不让嵌入的工具条乱跑?
最好是在我的工具条下面。
或都说我给一个TControlBar让它们都呆在里面
能不能设置它们的parent=XXX;
 
完全可以!
 
doll_paul:
请问如何解决?
 
你是指所有嵌入的程序,还是指如Word类的程序?
 
是指如Word类的程序
 
那简单,方法我是知道,但没有整理,如果我这二天整理了,稍后告诉你!
 
多谢先。
 
重点关注一下,我也想问这个问题.
 
通过Position属性设置就成了~

取值如下:
$00000000 左 $00000001 上 $00000002 右 $00000003 下 $00000004 恢复

这些值是我试出来的,因为我没有在导入的类型库中找到相关声明的常量,所以....错了,
不要骂我,反正我试了,没问题,哈哈~
 
补一句,如果不想TOP,LEFT什么的,具体位置还可通过Left和Top指定哦 ̄
 
doll_paul:
你好
Word工具栏的的对象是怎么取到的?
我太菜了
不知道是什么的.Position?
 
Sorry,我以为你和我一样在慢慢摸索呢,原来老兄只是在等别人的答案啊,哈哈~

通过Application.CommandBars就可以了~

具体使用方法可以查Office VBA的帮助,不过,上面的语法好像是VB的,呵呵,你慢慢试吧!
上面的值,我就是试出来的!

祝你好运!
 
doll_paul
请问它的Parent有什么用?
我想把它控制在一个范围之中.
left
top 好象不是很好定位
 
我用Position
系统说不支持此接口
可能是我用office xp 的原因
但是left
top 不起作用
工具条还是在我的工具条下面一大截的地方出来
之间有一段空隙
手工拉一下又可以合在一起
......
 
xp可以呀,我的就是,没问题啦!!!
 
设置PARENT估计不行,因为要知道工具栏的HWND才行

doll_paul的意思是通过代码使WORD的工具栏固定在一个位置或停靠在窗口上,这个倒是
容易,你只消获取到WordApplication(如果用OLE,则是OLEContainer中的Object),
然后你就可以用MSO中的接口了(须引用$Delphi/Ocx/Servers/中的PAS或注册的类型库)。

WordApplication.CommandBars的每一个Item,都是 CommandBar,
在Office2000.pas你会找到以下定义:
CommandBar = interface(_IMsoOleAccDispObj)
['{000C0304-0000-0000-C000-000000000046}']
property BuiltIn: WordBool read Get_BuiltIn;
property Context: WideString read Get_Context;
property Controls: CommandBarControls read Get_Controls;
property Enabled: WordBool read Get_Enabled;
property Height: SYSINT read Get_Height;
property Index: SYSINT read Get_Index;
property InstanceId: Integer read Get_InstanceId;
property Left: SYSINT read Get_Left;
property Name: WideString read Get_Name;
property NameLocal: WideString read Get_NameLocal;
property Parent: IDispatch read Get_Parent;
property Position: MsoBarPosition read Get_Position;
property RowIndex: SYSINT read Get_RowIndex;
property Protection: MsoBarProtection read Get_Protection;
property Top: SYSINT read Get_Top;
property Type_: MsoBarType read Get_Type_;
property Visible: WordBool read Get_Visible;
property Width: SYSINT read Get_Width;
property AdaptiveMenu: WordBool read Get_AdaptiveMenu;
end;
很明显,我们关心的是Left,Position,RowIndex,Top这几个属性(至于Parent,并不是DELPHI
中的那种定义)。其中:
// Constants for enum MsoBarPosition
type
MsoBarPosition = TOleEnum;
const
msoBarLeft = $00000000;
msoBarTop = $00000001;
msoBarRight = $00000002;
msoBarBottom = $00000003;
msoBarFloating = $00000004;
msoBarPopup = $00000005;
msoBarMenuBar = $00000006;
其中的意义估计大家一看都明白。只要把把Position设置为msoBarTop ,则工具栏会停
靠的窗口上部。

如果不希望用户把工具栏拖走,你可以修改Protection这个属性,定义:
// Constants for enum MsoBarProtection
type
MsoBarProtection = TOleEnum;
const
msoBarNoProtection = $00000000;
msoBarNoCustomize = $00000001;
msoBarNoResize = $00000002;
msoBarNoMove = $00000004;
msoBarNoChangeVisible = $00000008;
msoBarNoChangeDock = $00000010;
msoBarNoVerticalDock = $00000020;
msoBarNoHorizontalDock = $00000040;
很显然,设置成msoBarNoChangeDock 即可。
 
为什么 Ole 中的Word没有"文件"菜单?
 
to Huzzz,我理解楼主的意思就是通过TOP或LEFT来设置工具栏的位置哦~

所以,我告诉他TOP和Position二个属性~

我当时也在PAS文件里找了相关常量,但没有找到。我在把Office20000的类型库导入,然后
查找的!

另:你否可以提供一个你的联系办法呢,我有其它问题请教。MSN或QQ都可以!

如果不方便这里说,可以EM通过我。EM:doll-paul@263.net
 

多谢各位
我试过了
在中间浮动当住别的控件的原因是
我的Ole控件放的地方不太好
找到一个规律是工具栏在Ole控件的上部出现
不管你如何设它们都变不了
正在试
各位的方法是好方法
但我确实定制不了它们
可能是我窗口的控件太多了
如果用多文档的方式一个窗口只有一个Ole没其它控件时候工具栏很正确,只是在子窗口中
单文档只有一个Ole没其它控件时候工具栏也很正确
但有了别的控件时且Ole只占窗口的一部分时
就出现了上面的规律。
不知各位是不是这样。

 
打开以后我设top,eft根本不起作用
它们还是在原来泊位的地方
 
后退
顶部