unit ControlWordS;

interface

uses Classes, Sysutils, Word97;

type
  TControlWord = class(TComponent)
  private
    { Private declarations }
    FWordApp : TWordApplication;
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

function OpenWordFile(DocPath : String) : Boolean;

procedure myAppQuit(Sender: TObject);
    { 將游標移到本行第一碼 }
    procedure MoveToLineFirst;
    { 將游標移到本行最後一碼 }
    procedure MoveToLineEnd(Selected : Boolean);
    { 將游標移到本頁最前 }
    procedure MoveToPageFirst;
    { 將游標移到本頁最後 }
    procedure MoveToPageEnd;
    { 將游標向右移動N碼 }
    procedure MoveToRight(Selected : Boolean; lCount : Integer);
    { 設定書籤 }
    procedure AddBookMark(BookMarkName : String);
    { 移動到指定的書籤上 }
    function GotoBookMark(BookMarkName : String) : Boolean;
    { 切換頁首頁尾 }
    procedure ChangSeekType(ViewType : String);
    { 取得游標現在所在頁次 }
    function GetNowPageNumber : Integer;
    { 存檔 }
    procedure SaveDocument(DocPath : String);

function FindText(KeyStr : String) : Boolean;

published
    { Published declarations }
  end;

implementation

{ TControlWord }

procedure TControlWord.AddBookMark(BookMarkName: String);
var aRange, aDefaultSorting : OleVariant;
begin
  With FWordApp Do
  Begin
    aRange := Selection.Range;
    ActiveDocument.Bookmarks.Add(BookMarkName, aRange);
    aDefaultSorting := wdSortByName;
    ActiveDocument.Bookmarks.DefaultSorting := aDefaultSorting;
    ActiveDocument.Bookmarks.ShowHidden := True;
  End;
end;

procedure TControlWord.ChangSeekType(ViewType: String);
var aSeekTYpe : OleVariant;
begin
  If UpperCase(ViewType) = 'PAGEFOOTER' Then
    aSeekTYpe := wdSeekCurrentPageFooter
  Else If UpperCase(ViewType) = 'PAGEHEADER' Then
    aSeekTYpe := wdSeekCurrentPageHeader
  Else aSeekTYpe := wdSeekMainDocument;
  With FWordApp Do
  Begin
    ActiveWindow.ActivePane.View.SeekView := aSeekTYpe;
  End;
end;

constructor TControlWord.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FWordApp := TWordApplication.Create(Self);
  FWordApp.OnQuit := myAppQuit;
end;

destructor TControlWord.Destroy;
begin
  FWordApp.Disconnect;
  FWordApp.Free;
  inherited Destroy;
end;

function TControlWord.FindText(KeyStr: String): Boolean;
begin
  //
end;

function TControlWord.GetNowPageNumber: Integer;
var
  aPageType : OleVariant;
  NowPageNumber : Integer;
begin
  aPageType := wdActiveEndPageNumber;
  NowPageNumber := FWordApp.Selection.Information[aPageType];
  Result := NowPageNumber;
end;

function TControlWord.GotoBookMark(BookMarkName: String): Boolean;
var aWhat, aWhich, aCount, aName : OleVariant;
begin
  with FWordApp Do
  Begin
    aWhat := wdGoToBookmark;
    aName := BookMarkName;
    Result := True;
    If ActiveDocument.Bookmarks.Exists(aName) Then
      Selection.GoTo_(aWhat, aWhich, aCount, aName)
    Else Result := False;
  End;
end;

procedure TControlWord.MoveToLineEnd(Selected: Boolean);
var aUnit, aExtend : OleVariant;
begin
  With FWordApp Do
  Begin
    aUnit := wdLine;
    aExtend := wdExtend;
    If Selected Then
      Selection.EndKey(aUnit, aExtend)
    Else
      Selection.EndKey(aUnit, EmptyParam);
  End;
end;

procedure TControlWord.MoveToLineFirst;
var aUnit : OleVariant;
begin
  With FWordApp Do
  Begin
    aUnit := wdLine;
    Selection.HomeKey(aUnit, EmptyParam);
  End;
end;

procedure TControlWord.MoveToPageEnd;
var aUnit : OleVariant;
begin
  With FWordApp Do
  Begin
    aUnit := wdStory;
    Selection.EndKey(aUnit, EmptyParam);
  End;
end;

procedure TControlWord.MoveToPageFirst;
var aUnit : OleVariant;
begin
  With FWordApp Do
  Begin
    aUnit := wdStory;
    Selection.HomeKey(aUnit, EmptyParam);
  End;
end;

procedure TControlWord.MoveToRight(Selected: Boolean; lCount: Integer);
var
  aUnit, aExtend, aCount : OleVariant;
begin
  With FWordApp Do
  Begin
    aUnit := wdCharacter;
    aExtend := wdExtend;
    aCount := lCount;
    If Selected Then
      Selection.MoveRight(aUnit, aCount, aExtend)
    Else
      Selection.MoveRight(aUnit, aCount, EmptyParam);    
  End;
end;

procedure TControlWord.myAppQuit(Sender: TObject);
begin
  FWordApp.Disconnect;
end;

function TControlWord.OpenWordFile(DocPath : String): Boolean;
var FFIleName : OleVariant;
begin
  FFileName := DocPath;
  FWordApp.Documents.Open(FFileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  FWordApp.Visible := True;
end;

procedure TControlWord.SaveDocument(DocPath: String);
var
  aDocFileName , aDocFileFormat: OleVariant;
begin
  aDocFileName := DocPath;
  aDocFileFormat := wdFormatDocument;
  FWordApp.ActiveDocument.SaveAs(aDocFileName, aDocFileFormat, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;

end.

Delphi 操作Word怎么控制光标的位置的更多相关文章

  1. android EditText控制光标的位置

    利用自定义键盘,需要手动删除编辑框中的文本时,会根据光标的位置来删除字符.那么,如何来控制光标呢,android为我们提供了哪些方法,来处理光标呢? 这里提供几个自己写的方法,根据这些方法可以满足在光 ...

  2. textfield控制光标开始位置

    //    UIView *paddingView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.wi ...

  3. iOS-textfield控制光标开始位置

    //    UIView *paddingView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.wi ...

  4. delphi 操作 word

        uses  ComObj,word2000   procedure TForm1.ExportWord(); var FWord :Variant; FDoc :Variant; i,Row: ...

  5. Delphi 操作word 表格

    var wordApp, WordDoc, WrdSelection, wrdtable: variant; strAdd: string; wdPar,wdRange:OleVariant; iCo ...

  6. 用DELPHI操作EXCEL Word

    用DELPHI操作EXCEL 在DELPHI中显示EXCEL文件,可用以下简单代码做到.但要实用,则需进一步完善. var  Form1: TForm1;  EApp:variant;implemen ...

  7. delphi 换行操作 Word

    delphi 换行操作 我将我的商用<旅行社管理系统>的 发团通知 部分奉献给您,望对您有所帮助. procedure TFrmMain.N327Click(Sender: TObject ...

  8. Delphi读取Word

    Delphi读取Word现在关于往Word中写入数据的方法比较多,现在专门开个贴子,希望大家把自己读取Word内容的心得体会说一下,包括读取word文档中,有几个段落,如何读取第几个段落,读取有拼音的 ...

  9. 控制input输入框光标的位置

    一:理解input, textarea元素在标准浏览器下两个属性selectionStart, selectionEnd. selectionStart: 该属性的含义是 选区开始的位置: selec ...

随机推荐

  1. 编写高性能JavaScript【转】

    英文链接:Writing Fast, Memory-Efficient JavaScript 很多JavaScript引擎,如Google的V8引擎(被Chrome和Node所用),是专门为需要快速执 ...

  2. ios学习笔记block回调的应用(一个简单的例子)

    一.什么是Blocks      Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block. 二. ...

  3. Java 获取amr音频格式的音频长度

    import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; public class GetAm ...

  4. Java中转UTC时间字符串(含有T Z)为local时间

    在Java中我们需要转换相应格式的字符串,很多时候我们想到用SimpleDateFormat类来解析.但是最近我在调用一个第三方的接口时返回的 JSON字符串中有个expires字段的值是2014-0 ...

  5. window下安装composer and yii2

    我的环境是集合包xampp 1,下载composer:下载地址https://getcomposer.org/download/, 点击蓝色字体“Composer-Setup.exe” 2,安装com ...

  6. PowerDesigner生成的ORACLE 建表脚本中去掉对象的双引号,设置大、小写

    原文:PowerDesigner生成的ORACLE 建表脚本中去掉对象的双引号,设置大.小写 若要将 CDM 中将 Entity的标识符都设为指定的大小写,则可以这么设定: 打开cdm的情况下,进入T ...

  7. (转)java性能调优

    本文转自:http://blog.csdn.net/lilu_leo/article/details/8115612 一.类和对象使用技巧 1.尽量少用new生成新对象 用new创建类的实例时,构造雨 ...

  8. Android Handler使用实例

    本文主要介绍Android中Handler的简单使用方法,Handler跟多线程,消息队列联系很紧密,在平常的实际程序开发中比较常见.本文分为4个简单的例子来学校handler Handler使用例1 ...

  9. 24个有用的PHP类库分享

    目前,PHP是用于Web开发的最流行的脚本语言.你可以在互联网上随手找到关于PHP大量资料,包括文档.教程.工具等等.PHP不仅是一种功能丰富的语言,它还能帮助开发人员轻松地创建更好的网络环境.为了进 ...

  10. CMMI 配置管理

    配置库的相关知识 通过建立物理配置库的设立规范.各配置库目录的设立原则,确保配置库的统一与规范,确保项目产品得到有效的管理与运用,提高资源的共享与利用:通过 变更管理活动,保证产品的完整.正确.一致, ...