OleContainer操作word,再打开一个word时即失去焦点,不好编辑,如何解决这个问题?(200分)

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

lhb_yz

Unregistered / Unconfirmed
GUEST, unregistred user!
OleContainer操作word,再打开一个word时即失去焦点,不好编辑,如何解决这个问题?
如果修改olectnrs.pas文件的
procedure TOleContainer.CMDocWindowActivate(var Message: TMessage);
begin
if Assigned(FDocForm) ....
也只能在EXE文件下可以,现在做成ActiveForm 还是不行。有何方法可以解决?
 
定义一个boolean类型变量ole1f
加入以下过程:
procedure TForm1.FormCreate(Sender: TObject);
begin
ole1f:=false;
Application.OnDeactivate:=appdeactive;
Application.Onactivate:=appactive;
end;

procedure Tform1.appdeactive(Sender: TObject);
begin
if ole1.State=osUIActive then begin
ole1f:=true;
end;
end;

procedure Tform1.appactive(Sender: TObject);
begin
if ole1f then begin
ole1f:=false;
ole1.doverb(1);
end;
end;

procedure Tform1.FormDestroy(Sender: TObject);
begin
Application.OnDeactivate:=nil;
Application.Onactivate:=nil;
end;
 
www.source520.com 再次更新近3万代码,全部免费免注册狂下载
 
myid0602
这样做是可以了 但又有新的问题了 如果已打开word时 再运行程序 输入什么的都可以 就是在文档中右击菜单没有了。
 
myid0602
另外 做成ActiveForm 还是不行
 
关注,我也有同样的问题.
 
ActiveForm中如何解决这个问题呀
 
我也遇到同样问题,在ActiveForm中如何解
 
ActiveForm中如何解决这个问题?没人知道吗?[:(]
 
TnxOleContainer =class(TOleContainer)
private
procedure CMUIDeactive(var Mesg: TMessage); message CM_UIDEactive; //这个消息在OleContainer里边有相应函数
end;

.....
var
CanUIDeactive: Boolean;
begin
if State < osInplaceAative then
Inherited
else
begin
CanUIDeactive:= True;
if Assigned(FOnUiDeactive) then FOnUIDeactive(CanUIDeactive);
if CanUIDeactive then Inherited;
end;
end;
查到帖子说这个可以 但
if Assigned(FOnUiDeactive) then FOnUIDeactive(CanUIDeactive);编译不通过
FOnUiDeactive FOnUIDeactive是什么?
 
再次回到OleContainer时,捕捉鼠标点击事件,然后doverb.
不过,因为装入了word,恐怕不好捕捉.
我在自己的程序里没有处理.用户双击就可以编辑了.
 
iseek
双击?我这里双击无效 无法得到焦点
 
我这有个比较笨的方法,你可以使一下。就是再用一个触发器,但触发时关闭ole后再打开,这样你又可以编辑了。并且原来的内容仍然存在。代码如下
self.OleContainer1.Close;//关闭OLE控件
self.OleContainer1.DoVerb(ovShow); //使其运行
 
后退
顶部