Word文档的多页显示(200分)

  • 主题发起人 主题发起人 钱中东
  • 开始时间 开始时间

钱中东

Unregistered / Unconfirmed
GUEST, unregistred user!
OLE容器中装入一WORD文档对象,用PAINTTO方法只能画出首页,怎么样
调出其后的各页?
 
用paintto方法?你到底想干什么用呢?
 
对啊,我也很迷惑。用Olecontainer1.createobjectfromfile不就行了吗?
 
Paintto方法用在一多媒体演示程序中,需要将Word文档的各页以特技方式演示出来。演示界面上不能出现OLE容器,出现也不能使其作出特技。
 

你试试用Oledraw(....);
//ole1为Tolecontainer;
var
DataObject: IDataObject;
Foleobject:IoleObject;
Begin
Foleobject:=ole1.OleObjectInterface;
FOleObject.QueryInterface(IDataObject, DataObject);
Oledraw(dataobject,,,);
//后面的参数你可以查Api;
//其中有一个是LPRECT,这样我想是可以的。

 
呵呵, 不管用什么方法画,总要调用Word这个对象的NextPage/PageDown方法
才能翻页显示
 
不用的,我想用多媒体演示的窗口大小
是固定的,那么只要用个循环语句用
Oledraw(dataobject,,LPRECT,);参数参见WINAPI help
改变其中LPRECT的值,就可以控制了,
获得一页的具体大小,然后Pagedown到尾
不过我没有进行具体的编程实验,
不过是可行的(最简单的情况).

 
这样做的问题很多呀?
比如,怎样知道到底有多少页可以翻?
 
我已经解决了这个问题:
做法为:
将Word文档读入Olecontainer1,并设其的visible&sizemode
为false and autosize;(这样ole容器不可见)
加上个Scrollbox1,在box里放个paintbox1;
在Olecontainer读入Word文档后,
paintbox1.height:=Olecontainer1.height;
scrollbox1.VertScrollBar.position:=0;
1: Hd:=paintbox2.canvas.handle;
Ole1.PaintTo(Hd,1,1);
2: scrollbox1.VertScrollBar.position:=
scrollbox1.VertScrollBar.position+Inc;
//这里Inc应该是你想显示的窗口的高度
3: 重复1直到scrollbox1.VertScrollBar.position》=
paintbox1.height

此外:如果你想进一步控制画面,可以用Tcanvas的方法将
每次paintto的内容写入TbitBmp,那样你想怎么干都可以
了,只要是Bmp能行。






 
错了,错了。应该是这样的,我开始想错了。
Ole1为Ole容器
var
MsWord: Variant;
begin
MsWord := CreateOleObject('Word.Basic');
MsWord.Fileopen('d:/hua/newpaper.doc');;
Msword.Appshow; //可以不要
Msword.AtStartofdocument;
//以下为循环体。
while 文档没有结束前。 do
Begin
Msword.Pagedown(1,1);//参数 1 为1,表示下移一个屏幕
//参数 2 为1,表示下移按住了shift,即选择下移
Msword.EditCopy;
Ole1.Paste; //将内容拷贝到Ole中。
//设Ole1的sizemode为autosize,
Ole1.paintto(..) 到个canvas,
//从canvas中可以做自己的处理。
//这样可以读出每页的内容。
End;
End;
需要注意的是Pagedown(1,1)不是下移一页,如果你想拷贝完整的
一页的话,可以用Linedown(1,1),然后判断是否在同一页内。

 
Thanks Mr. Sand,给了我一个比较完满的答案,虽然在我提出此问题
前已是用类似的方法应付过去了(当时我拷到剪取板上调用了一个宏,
因为PageDown操作在剩余部分不到一页时不动作),此方法我用QZDMMX
的名字在 http://www.experts-exchange.com/Q.10187971 也提出过,
但经过我四个多月的运行发现,当分页将一段落拦腰切断时,COPY过
去的内容经过PASTE再PAINTTO往往会丢最末的一两个字(字体较大时
更容易出现),这些丢失的字在下页开头也不会再现了,这可能与MS
WORD处理段落的一些排版禁则有关,由于不可预测何时会出现这种
情况,所以很麻烦。所以最好有一些专门控件来处理(而且最好是针
对中文版的)。
我还想问问OLEDRAW的详细用法,因为我想把PAINTTO出来的讨厌
的灰底色改成我希望的颜色,虽然PAINTTO后可以再抠灰底色,但不能
保留不希望抠掉的部分(比如页上某幅图上的灰底色)。

 
调用 oledraw 时有个参数为hdc
直接指定HDC的背景就可以了,
 
怎么判断满页呀。我就做过一个报表用WORD,当数据库中的记录向表格中加入时,表格是自动
生成的,我想当不满一页时也想以空表格来填上怎么办呀?
 
接受答案了.
 
如何判断在同一页
 
后退
顶部