WordApp := CreateOleObject('Word.Application');
  WordApp.Documents.Add;
  WordApp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(1, 'Sub FileExit()');
  WordApp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(2, '    Selection.InlineShapes.AddPicture FileName:= _ ');
  WordApp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(3, '       "C:\Program Files\Common Files\Microsoft Shared\Clipart\cagcat50\AN02097_.wmf" _');
  WordApp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(4, '       , LinkToFile:=False, SaveWithDocument:=True');
  WordApp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(5, 'End Sub');
  WordApp.Visible := True;

解决方案 »

  1.   

    只能给你提供一个别人总结的资料,这个我也没用过
    使用CreateOleObject方式调用Word相比Service控件的最大缺点就是不支持代码的自动生成,
    但是我们充分的利用VBA代码就可以弥补这个功能。
    Word作为一个功能强大的Com,可以很容易被编程工具调用,成为办公自动化系统中处理文档
    的强有力的嵌套工具,尤其是充分Word本身的录制宏的功能,更进一步减轻了编程的负担。
    下面就如何在Delphi里面利用Word的VBA代码进行一些总结。
    1、 生成VBA代码。Word本身具有很强的可扩展性,尤其是支持用户自定义功能,其实现
    的主要方式就是通过VBA代码来实现的。在“工具->宏->Visual Basic编辑器”里面就可以看
    到具体的宏代码,可以直接进行编辑。而且还可以使用录制宏的功能自动生成宏代码。方法是
    选择“工具->宏->录制新宏”,然后执行自己想通过程序实现的功能,如存盘、打印等功能,
    此时Word一边执行你要实现功能,一边将你的操作生成了一个宏,在实现功能后,可以选择
    “工具->宏->VisualBasic编辑器”,查看生成的宏代码。例如:我们要将文档中的“讨论”全部替换成“研讨”。
    a. 点击“工具->宏->录制新宏”,直接点击确定,默认的宏保存到了Normal.dot系统公
    用模板里面。
    b. 点击“编辑->查找”,出现弹出对话框,输入查找和替换的字,点确定。进行替换。
    c. 结束宏的录制,点击结束按钮。
    d. 按F11或者“工具->宏->Visual Basic 编辑器”,查看宏代码。缺省查看Normal里面
    的模块里面的NewMacros模块。
    以下是生成的宏代码:
    Sub Macro1()
    '
    ' Macro1 Macro
    ' 宏在 2002-2-1 由 yzhshi 录制
    '
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "讨论"
            .Replacement.Text = "研讨"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchByte = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub
    2、 精简宏代码。通常,生成的宏代码有很多语句对你要实现的功能来说都是多余的。我们要
    做的就是如何找到我们需要的代码。此时我们查看具体的代码,剔除明显没有用途的代码,然后光
    标停留在宏上面,按F5执行,看是否实现功能,逐步精简,得到最小代码。此步骤可参考Word的
    VBA帮助来判断代码是否有用。如上例,精简下来,剩下以下代码。
    Sub Macro1()
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "讨论"
            .Replacement.Text = "研讨"
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub3、 转换成Delphi代码。这一步其实很简单,对于VBA代码,只需要在前面添加Word的句柄或者
    文档的句柄或者文档的句柄.Application就可以直接操作了。
    例:逐句翻译:(Word_Handle是Word的句柄)
    (VB)     Selection.Find.ClearFormatting
    (Delphi)  Word_Handle.Selection.Find.ClearFormatting;(VB)     Selection.Find.Replacement.ClearFormatting
    (Delphi)  Word_Handle.Selection.Find.Replacement.ClearFormatting;
    以上两句简单添加上Word的句柄就可以了。(VB)     With Selection.Find
                  Text = "讨论"
                  Replacement.Text = "研讨"
    End With
    (Delphi)  Word_Handle.Selection.Find.Text := '讨论';
      Word_Handle.Selection.Find.Replacement.Text := '研讨';
    以上几句因为Delphi不支持Variant的With结构,所以分开写。同时转换成Delphi语法。(VB)    Selection.Find.Execute Replace:=wdReplaceAll
    (Delphi) Word_Handle.Selection.Find.Execute(Replace:=2);
    上面一句存在一个小技巧,如何找到常量wdReplaceAll的数值为2?
    这里有几个办法,
    一:直接use Word2000或者word97单元,那么直接使用常量wdReplaceAll就可以了;
    二:到Word2000.pas或者Word97.pas里面查找wdReplaceAll的数值;
    三:直接使用VBA代码见wdReplaceAll的数值显示出来。办法是写一个小过程,然后执行,如下:
    Sub ShowValue()
      MsgBox wdReplaceAll
    End Sub