这段代码为什么没执行?(300分)

  • 主题发起人 主题发起人 henry0612
  • 开始时间 开始时间
H

henry0612

Unregistered / Unconfirmed
GUEST, unregistred user!
我在ActiveForm的OnActive事件中加了如下代码:
var
vWordObject: Variant;
begin
WordContainer.CreateObject('Word.Document',false);
vWordObject:= Wordcontainer.OleObject;
WordContianer.OleObject.Application.CommandBars['Word Count'].Visible:= false;
vWordObject.Application.ActiveWindow.ActivePane.DisplayRulers:= False;
btnLook.Enabled:= false;
end;
WordContainer是个OLE容器名称
这段代码的意思是打开页面,下在ActiveForm后,希望WordContainer中有一个空白的Word
文档,没有常用工具栏和标尺。
可是真正的结果,以上的都没实现,只得双击Ole控件才能加入Word文档,且常用工具条
也没有消失。
但是在普通的应用程序上,代码的功能都实现了,这是为什么?
请问各位大虾要ActiveForm达到如上效果应怎样处理?
 
你的代码根本无法执行,以下是成功的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
vWordObject: Variant;
begin
WordContainer.CreateObject('Word.Document',false);
vWordObject:= Wordcontainer.OleObject;
vWordObject.Application.CommandBars['Standard'].Visible:= false;
vWordObject.Application.CommandBars['Formatting'].Visible:= false;
WordContainer.doverb(ovPrimary);
vWordObject.ActiveWindow.ActivePane.DisplayRulers:= False;
btnLook.Enabled:= false;
end;

 
ActiveForm 不会执行 OnActivate的
而且 OnActivate 并不是最理想的在启动以后执行代码的地方
(在普通 Form 中也不推荐,因为每次 Form 激活时都会执行)
放在 OnCreate 可以
 
你好象发了两贴。
放在 ActiveForm 的 OnCreate 事件中,我的测试是成功。你试试
 
那段代码在OnCreate将会异常,但仍感谢各位朋友的帮助,
有更好的办法,实现上述功能吗?
 
采用轻松虎的方法也没有成功,ontimer的事件同样没有执行,这是怎么回事?
如何实现当ActiveForm下载完毕后OleContainer中显示出一个空白的Word文档?
 
该异常主要是由于 在 Create 时OLEcantainer不可见,
而进行了一些不该做的操作。

我将该段初始程序移至 <font color=red>OleContainer 的 OnResize事件</font>
(只能放在这个事件中)后,不再有异常出现。而且非常爽。

在浏览器改变大小或最小化时并不会再次触发 OleContainer
的 OnResize事件.只有当用户用“前进”、“倒退”等方法进行
页面切换时才会触发该事件。所以,如果用户用各种方法返回到
先前页面时,如果不需要显示先前OleContainer 中的内容,那么
仅在该事件中处理就行。

我这里添加了一个功能,就是当用户“返回”到该页面时,
必须显示用户先前在 OleContainer中输入的内容。这样就需要
考虑OleContainer中对象的保存。
保存的唯一时机就是在<font color=red> OleContainer 的 OnDeactivate事件</font>
中(同样,放在其它事件中是不行的)。

声明一个全局变量 ReturnToPage,表示是“返回”到该页面,
还是首次激活该页面。以使进行显示OleContainer的空文档,
或装入先前输入的内容。

var
ReturnToPage:Boolean=false;

以下是两个事件处理:

procedure TActiveFormX.WordContainerResize(Sender: TObject);
var
vWordObject: Variant;
begin
if ReturnToPage then
begin
WordContainer.LoadFromFile('c:/tt.doc');
WordContainer.doverb(ovShow);
end
else
begin
WordContainer.CreateObject('Word.Document',false);
ReturnToPage:=true;
vWordObject:= Wordcontainer.OleObject;
vWordObject.Application.CommandBars['Standard'].Visible:= false;
vWordObject.Application.CommandBars['Formatting'].Visible:= false;
WordContainer.doverb(ovShow);
vWordObject.ActiveWindow.ActivePane.DisplayRulers:= False;
end;
btnLook.Enabled:= false;
end;

procedure TActiveFormX.WordContainerDeactivate(Sender: TObject);
begin
Wordcontainer.SaveToFile ('C:/tt.doc');
end;

以上程序在浏览器中经反复测试(不断地前进、后退、修改),从未见异常。

但是这里有一个奇怪的问题,当我向ActiveForm放置一编辑框时,
使OleContainer失去焦点后,又去点击它时,没有反应。而且这和事件处理
无关,因为我把所有事件处理拿掉后,还是这样。还望告知是何原因?
然而这一问题也是可以解决的,在ActiveForm中放一按钮,在按钮中
执行以下命令后就又可以进行编辑了。

WordContainer.doverb(ovShow);

当然我上面在保存信息时使用的是文件,你也可以考虑用流。在用文件时
应该考虑一下文件的可用性。另外变量ReturnToPage可以声明为ActiveForm
的成员。

以上见解,仅你参考!

 
结束此问题
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
697
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部