Word97和Ole,还有Stream(令人头大的问题)(250分)

  • 主题发起人 茶叶蛋
  • 开始时间

茶叶蛋

Unregistered / Unconfirmed
GUEST, unregistred user!
天啊,实在吃不消了,求援,求援!

我的程序里嵌了一个OleContainer,是指向Word97的.它的一切输入输出都
必须由我控制.一开始还简单,调用OleContain的FileNew, FileOpen一类
的函数,可以新建,打开制定的文件,可是当我把它所编辑的文件存盘时,问
题来了.用OleContainer的SaveToFile是可以存盘的,但是存进去再读出来
就是一堆乱码.用OleContainer的SaveAsDocument可以存为doc文件,读出
来也挺省事,不过我的真正目的是要把OleContainer里的文档存到内存里去.
而OleContainer的SaveToStream方法恰恰和SaveToFile里的内容是一样的.
存进内存后,再由OleContainer读出来又是一堆乱码!
<font color="#ff0000">
到底如何才能把OleContainer里的doc文档内容存入内存后,再读到
OleContainer内还能保持原来的文档模样?</font>

另外,我的界面是这样的:
有菜单,有工具条,一个PageControl占据整个客户区.在此PageControl上有
两页,其中的一页上有一个Panel和一个PageControl(简称为P2).Panel上有
一些text和Combobox,P2上有n页,每一页上都有一个OleContainer.一旦我
激活某一页上的OleContainer,我的form上会出现一个垂直滚动条,此时激活
的OleContainer根本看不见!这样一来我的界面全毁了!当我把滚动条往下点,
OleContainer到是出现了,但该死的Word工具条却顿时无影无踪!工具条没了
也就算了,但它占的地方却不让出来,那里还是一片灰!如果滚动条只移一点点,
什么东东都是好的!现在我只好把整个窗口最大化以保证我的界面完整,是不是
很好笑?当我把窗口的尺寸舍为不可更改时,我的Panel就会被压的面目全非,
除了最大化,不管我把窗口尺寸如何设,都会出问题(哪怕就是屏幕尺寸!).
我把用作工具条的Panel的locked舍为true,结果我的工具条可以和Word97的
工具条共存,但别的一点都没有改变.

还有,激活OleContainer的Word97工作区编辑后,当我对上方有ComboBox的
Panel进行操作时,下方的OleContainer和Word工具条都会失去焦点.
Word工具条会消失,OleContainer里的Word97编辑区会变灰,不接收我的输入.
但编辑区的滚动条还是好的!真是搞不懂!

不好意思,因为心情激动,一下子写了这么多.这三个问题折腾我很久了,今天
我把它们拿出来,大家共享一下.无论程序,控件都可以给我,但必须有源代码
(不好意思,我要交差).千万不要告诉我不要用Word97,我也不想用M$的Office
但是,唉,身不由己啊!

三个问题,先悬赏250分,如果很快全部解决了,我再另行给大虾们加分.
<font color="#ff0000">尽快吧,大虾们,我被催的很紧啊</font>
 
难道真的没人知道吗?
 
是没人关心,还是我写的太长?
 
这是我第三次刷新了! :-(
 
虽然本人在OLE上也有挠头的问题,但对你所说的一个问题可以解决,即:
你说的SaveTo与读出的不一致问题。OLE格式与DOC文档稍有不同,即OLE文档包含二
部分:一是OLE文件头,第二部分才是你输入的文档内容。所以,在你读出保留的OLE
文档时,应先跳过OLE文件头,这样才能解决问题。
具体的实施方法,由于本人也有不明白的(参见本人的帖子),很抱歉。但道理是正确的!

由于本人新进来,这分值还不知是何意,若你也能为小弟解决问题,就算扯平了。
 
我要吃茶叶蛋.
olecontainer在失去焦点之后,word对象没有完全关闭会导致你所说的现象.
解救办法:是在olecontainer的disactive事件中加入
olecontainer.close;
就可以解救.
你所说的savetofile的问题,其实是因为savetofile格式与doc格式不一之所至
但从流中读出数据,应该没什么问题,只要注意在使用loadfromsream时,stream的
position的值.
你所说的问题,我都已试过,没问题了.
 
补充一下:
1.关于界面还要把Form的EnableScoll置为false.
2.读后还要把Stream.Position置为0,才能重新读.
嘻嘻,粗心了.
 
多人接受答案了。
 
顶部