求助一个能够解决 word文档预览的问题!(100分)

  • 主题发起人 主题发起人 douxi1208
  • 开始时间 开始时间
D

douxi1208

Unregistered / Unconfirmed
GUEST, unregistred user!
我必须用OLE嵌入方式让WORD与我的程序在一个界面上,但用OLE嵌入WORD后无法打印预览,有没有高人能解决呀!先表示感谢!
(我看过以前的有关问题,但点预览时他打开了一个word界面,什么也没有,还是无法预览
不知该如何修改。或者有别的方法也行,只要能预览)
uses ActiveX;
procedure TForm1.MenuPreviewClick(Sender: TObject);//这是在我自己的FILE菜单里
var
IOO: IOleInPlaceObject ;
begin
OleContainer1.DoVerb(ovShow);
if OleContainer1.State in [osUIActive] then
begin
OleContainer1.OleObjectInterface.QueryInterface(IOleInPlaceObject,IOO);
IOO.UIDeactivate;
IOO :=nil;
end;
OleContainer1.OleObject.PrintPreview;
OleContainer1.DoVerb(ovShow);
OleContainer1.Align := OleContainer1.Align;
end;
 
学习,我也有同样的问题
 
用Office提供的链接库导入到一个能图文混排的控件里(如TRichViewEdit)
 
WordApplication1: TWordApplication;//不要设置连接
Button1: TButton;//预览

procedure TForm1.Button1Click(Sender: TObject);
var Doc:oleVariant;
begin
Doc:=OleContainer1.OleObject;
WordApplication1.Documents.Item(Doc).PrintPreview;
end;
 
to gztrzj;
不行呀!提示所需视图无效。能不能帮忙写具体点?
 
加入WordApplication1,但不要进行任何设置。
打印预览时,OleContainer1中的文档必须处于激活状态。
 
我的提议,你用WordApplication吧,Ole是不行的!不要浪费时间!
 
讨论:
我用WordApplication预览的,但是必须点击两次才能调出Word的预览窗口。
代码:
OpenWordDoc; //自定义的,打开一个word文档
WordApplicatoin.ActiveDocument.PrintPreview;
WordApplicatoin.ActiveWindow.ActivePane.View.Zoom.Percentage = 100; //设置为100%显示
 
to gztrzj;
我没做任何设置.我是这么写的
procedure Tmainform.fcTreeView2DblClick(Sender: TObject);
begin
OleContainer1.createobjectfromfile(extractfilepath(application.ExeName)+'temp.doc',true);
olecontainer1.DoVerb(0);
olecontainer1.Run;
oleshow:=true;
end;
procedure Tmainform.Button17Click(Sender: TObject);//这个按扭是嵌入word菜单中的
var
Doc:oleVariant;
begin
Doc:=OleContainer1.OleObject;
WordApplication1.Documents.Item(Doc).PrintPreview;
end;
但我感觉这样写应该是要提示:所需试图无效的.还请阁下在指点一二.
 
为何要调出WORD的预览窗口?用户如果要打印,他会点击打印的,不必须预览
 
oleshow:=true;//这句应为olecontainer1.show;
我按你的代码运行无错误。
 
to gztrzj;
这位大哥,我都快哭了,还是一样的提示,你能不能在仔细的想想,有没有漏掉的。
能不能你做一个简单的能够运行的小程序发给我,实在是感激不尽。
邮箱:ufsoftzf@163.com, thanks!
我的程序单元如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, OleCtnrs, OleServer, Word2000;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
Button1: TButton;
OleContainer1: TOleContainer;
WordApplication1: TWordApplication;
procedure N2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.N2Click(Sender: TObject);
var
Doc:oleVariant;
begin
Doc:=OleContainer1.OleObject;
WordApplication1.Documents.Item(Doc).PrintPreview;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
OleContainer1.createobjectfromfile(extractfilepath(application.ExeName)+'temp.doc',true);
olecontainer1.DoVerb(0);
olecontainer1.Run;
olecontainer1.show;
end;
end.
 
请用WordXP控件。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleServer, WordXP, StdCtrls, OleCtnrs;

type
TForm1 = class(TForm)
OleContainer1: TOleContainer;
Button1: TButton;
WordApplication1: TWordApplication;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); //激活文档
begin
OleContainer1.DoVerb(ovShow);
end;

procedure TForm1.Button2Click(Sender: TObject); //打印预览
var Doc:oleVariant;
begin
Doc:=OleContainer1.OleObject;
WordApplication1.Documents.Item(Doc).PrintPreview;
end;

end.
 
var
pOleInplaceObject: IOleInplaceObject;
pDocument: _Document;
begin
pDocument:=CheckDocumentReady;
if nxOleContainer1.OleObjectInterface.QueryInterface(IOleInplaceObject, pOleInplaceObject)<>S_OK then
exit;
nxOleContainer1.DefCanUIDeactivate:= True;
try
if pOleInplaceObject.UIDeactivate<>S_OK then exit;
pDocument.PrintPreview;
finally
nxOleContainer1.DefCanUIDeactivate:= False;
nxOleContainer1.DoVerb(OLEIVERB_UIACTIVATE);
end;
end;
 
to gztrzj;
不好意思,还要麻烦一下,wordxp控件我没有,请问那里可以下

to zjan521:
你的代码我不懂,所以编译不通过我也不知如何改,还请帮帮忙
pDocument:=CheckDocumentReady;
OleContainer1.DefCanUIDeactivate:= True;
两行不通过
 
var
pOleInplaceObject: IOleInplaceObject;
pDocument: _Document;
begin
pDocument:= ..//你的_Document;
if nxOleContainer1.OleObjectInterface.QueryInterface(IOleInplaceObject, pOleInplaceObject)<>S_OK then
exit;
// nxOleContainer1.DefCanUIDeactivate:= True;
try
if pOleInplaceObject.UIDeactivate<>S_OK then exit;
pDocument.PrintPreview;
finally
// nxOleContainer1.DefCanUIDeactivate:= False;
nxOleContainer1.DoVerb(OLEIVERB_UIACTIVATE);
end;
end;
 
to zjan521:
前辈!不好意思,我真是太水了,我还是不知道如何连接我的word文档,还请赐教!
pDocument:= // 如何连接 d:/temp.doc;
 
nxOleContainer1.CreateObjectFromFile(NewFileName, False);
nxOleContainer1.DoVerb(OLEIVERB_INPLACEACTIVATE); //以普通模式激活
if nxOleContainer1.OleObjectInterface.QueryInterface(_Document, pDocument)<>S_OK then //查询得到_Document
raise Exception.Create('不是有效的WORD文档!');
 
我给你发了一个DEMO,你瞧瞧吧
 
后退
顶部