+ -
当前位置:首页 → 问答吧 → 求Delphi控制word翻页显示的代码

求Delphi控制word翻页显示的代码

时间:2011-12-27

来源:互联网

有一个word文档带图片和文字信息(页数不超过10页),要用delphi显示word的内容(默认显示的是第一页内容),并控制word翻页显示,多谢大家了!

作者: yct0605   发布时间: 2011-12-27

在补充一点吧:程序默认打开word的第一页,可以设置延时时间自动跳转到第二页,一次类推

作者: yct0605   发布时间: 2011-12-27

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleServer, Word2000, ComObj;

type
  TForm1 = class(TForm)
  Button1: TButton;
  Button2: TButton;
  Button3: TButton;
  procedure Button1Click(Sender: TObject);
  procedure FormDestroy(Sender: TObject);
  procedure Button2Click(Sender: TObject);
  procedure Button3Click(Sender: TObject);
  procedure FormCreate(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;
  word: Variant;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.Enabled := True;
  Button2.Enabled := False;
  Button3.Enabled := False;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  try
  word.Quit;
  except
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  word := CreateOleObject( 'Word.Application' );
  word.Documents.Open('d:\test.doc');
  word.Visible := True;
  Button1.Enabled := False;
  Button2.Enabled := True;
  Button3.Enabled := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  word.Selection.GoTo(wdGoToPage, wdGoToAbsolute, '1');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  word.Selection.GoTo(wdGoToPage, wdGoToAbsolute, '4');
end;

end.

//仅示例,如何延时控制,timer你懂的。

作者: erhan   发布时间: 2011-12-27

这个是打开word来控制的,我想要集成在form里面来实现啊!

作者: yct0605   发布时间: 2011-12-27

引用 3 楼 yct0605 的回复:
这个是打开word来控制的,我想要集成在form里面来实现啊!


哦,网上查了一下,要集成的话可以用OleContainer;

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  Button1: TButton;
  Panel1: TPanel;
  OleContainer1: TOleContainer;
  WordDocument1: TWordDocument;
  procedure Button1Click(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  aa,bb,cc,dd: OleVariant;
begin
  OleContainer1.CreateObjectFromFile('d:\test.doc',false);
  OleContainer1.Show;
  OleContainer1.AutoActivate:=aaGetFocus;
  OleContainer1.SetFocus;
  WordDocument1.ConnectTo(IUnknown(OleContainer1.OleObject) as _Document);
  aa := wdGoToPage;
  bb := wdGoToAbsolute;
  cc := '4';
  dd := '';
  WordDocument1.Application.Selection.GoTo_(aa, bb, cc, dd);
end;

end.

//另:如果在单一窗体里调用OLE很容易发生OLE把整个窗体都占据的情况。建立专用的OLE窗体来避免这样的情况放生,使OLE显示在第一个窗体指定的位置(panel)
//网上有相关的美化代码,可以查到的,如需,可以提供查到的连接。

作者: erhan   发布时间: 2011-12-27

引用 4 楼 erhan 的回复:
引用 3 楼 yct0605 的回复:
这个是打开word来控制的,我想要集成在form里面来实现啊!


哦,网上查了一下,要集成的话可以用OleContainer;

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Form……

多谢了,我在网上也找了一个,就是只显示第一页和最后一页,麻烦你帮我看看。
[Delphi(Pascal) code

[code=Delphi(Pascal)]
var
  wordapp, WordDoc, PageRange: Variant;
  i, nPageCounts, nStart, nEnd : Integer;
  sContext: string;
begin
  wordapp := CreateOleObject('Word.Application');
  try
    wordapp.Visible := False;
    if OpenDialog1.Execute = False then Exit;

    WordDoc := wordapp.Documents.Open(OpenDialog1.FileName);

    //文档总页数
    nPageCounts := wordapp.Selection.Information[wdNumberOfPagesInDocument];

    //如果只有一页 那么全选就OK了
    if nPageCounts = 1 then
    begin
      wordapp.Selection.WholeStory;
      wordapp.selection.copy;

      if olecontainer1.canpaste then
        olecontainer1.paste;

      OleContainer1.Update;

      Exit;
    end;

    nStart := -1;
    nEnd := -1;
    //循环获取文档页中的内容
    for i := 1 to nPageCounts do
    begin

      //定位到第i页
      PageRange := wordapp.Selection.GoTo(wdGoToPage, wdGoToNext, IntToStr(i));

      //如果第i页是最后一页 那么直接将光标移动到最后 并输出内容
      if i = nPageCounts then
      begin
        wordapp.Selection.EndKey(wdStory,wdExtend);
        wordapp.selection.copy;

        if OleContainer1.canpaste then
          OleContainer1.paste;

        OleContainer1.Update;

        Exit;
      end;

      //取第i页的页首位置作为开始位置
      nStart := wordapp.Selection.Start;
      //定位到i+1页
      PageRange := wordapp.Selection.GoTo(wdGoToPage, wdGoToNext, IntToStr(i+1));
      //取第i+1页的页首位置作为结束位置
      nEnd := wordapp.Selection.Start;
      //根据开始位置和结束位置确定文档选中的内容(第i页的内容)
      WordDoc.Range(nStart,nEnd).Select;
      sContext := WordDoc.Range.Text;
      ShowMessage(sContext);
//      wordapp.Selection.WholeStory;
//      wordapp.selection.copy;

       { if olecontainer1.canpaste then
          olecontainer1.paste;

        OleContainer1.Update;  }

      //Sleep(3000);

      nStart := -1;
      nEnd := -1;
    end;               
  finally
    wordapp.Quit;
  end;



[/code]

作者: yct0605   发布时间: 2011-12-27

热门下载

更多