在应用措施中节制Word 97的运行
副标题#e#
首先必需在体例自动化客户措施时使其头文件中包括文件ComObj.hpp,写入#include <ComObj.hpp>。编程东西C++ Builder的开拓者把挪用Word 97自动化工具的成果大抵包装成了几个Ole object class函数,应用措施设计人员可以很利便地操作它们。
* 设定Ole工具的属性:
OlePropertyGet(propname)
OlePropertySet(propname,value) 个中value是任何可以转换为Variant型的值
* 挪用Ole工具的要领:
OleProcedure(OleProcName,[val,…])
OleFunction(OleFuncName,[val,…])
个中val是任何可以转换为Variant型的值可以通过OleFunction(OleFuncName,[val,…])父工具返回其子工具,句法是:子工具名=父工具名. OleFunction(OleFuncName,val)。并且可以对此要领组合从父工具返回其基层工具的工具。
C++ Builder中利用OLE自动化节制Word 97,必需把握Word 97的自动化工具及Microsoft Word Visual Basic辅佐文件中关于Word的工具要领和属性。Word工具代表一个Word 的元素,如文档、段落、书签或单个的字符。荟萃是一个工具,该工具包括其他数个工具,凡是这些工具属于沟通的范例,譬喻,一个荟萃工具中可包括文档中的所有书签工具。通过利用属性和要领,可以修改单个的工具,也可修改整个的工具荟萃。属性是工具的一个特性可能该工具操纵的一个方面。譬喻,文档属性包括名称、内容、生存状态,以及是否启用修订。要变动一个工具的属性,可以修改属性的值。要领是工具可以举办的行动。
代表Word 97应用措施的自动化工具有两个:Word.Application和Word.Basic,通过Application工具的WordBasic属性可以答允它们之间举办调动赋值。在C++Builder中通过CreateOleObject("…")就可启动Word 并得到句柄,将其赋给Variant变量。如有两个Variant型变量V1和V2,WordBasic是Application工具的属性:
V1=CreateOleObject("Word.Application");
V2=V1.OleFunction("WordBasic")。
#p#副标题#e#
以下通过一个简朴的例子,详细说明如安在C++ Builder中实现Word 97的自动化成果,其成果是打开或建设新文档,并向当前勾当中发送文字、插入位图和画条直线等。在C++ Builder 集成开拓情况IDE下,成立一项目Project1,个中包括Form1(其Caption为OLE Automation)的单位文件Unit1.cpp。表单Form1的OpenDialog1工具的Filter设为Word文档或位图。Unit1.cpp的头文件中必需包括"ComObj.hpp"。代码如下:
头文件Unit1.h代码为:
#ifndef Unit1H
#define Unit1H
//---------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComObj.hpp>
#include <Dialogs.hpp>
#include <ExtCtrls.hpp>
//---------------------
class TForm1 : public TForm
{
__published:
// IDE-managed Components
TButton *Button1;
TOpenDialog *OpenDialog1;
TButton *Button2;
TMemo *Memo1;
TBevel *Bevel1;
TButton *Button3;
TLabel *Label1;
TButton *Button5;
TBevel *Bevel2;
TLabel *Label2;
TLabel *Label3;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button5Click(TObject *Sender);
private:// User declarations
public:// User declarations
Variant
V,Vdocuments,Vdocument1,Vdocument2,Vactive;
/*界说Variant型全局//变量,别离指代Application工具, V的Documents工具,Vdocuments的Document工具(Vdocument1,Vdocument2)以及V的ActiveDocument工具*/
int tag; //用于记录Button3被点击的次数
__fastcall TForm1(TComponent* Owner);
Variant __fastcall GetWordObject();//得到Word 97自动化工具函数
void __fastcall Add(int i);// 编辑当前勾当文档指定的段落文字的函数
};
//---------------------
extern PACKAGE TForm1 *Form1;
//---------------------
#endif
Unit1.cpp文件代码为:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <ComObj.hpp>
//---------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
tag=1;//令tag的初值为1,其将随Button3的点击次数而递增
}
//---------------------
Variant __fastcall TForm1::GetWordObject()
{
Variant Obj1;
AnsiString AppName="Word.Application" ;
HWND hPrevApp = ::FindWindow(NULL, "Microsoft Word");
if(!hPrevApp)
{
Obj1=CreateOleObject(AppName) ;//Word没启动就启动它返回一自动化工具
}
else
Obj1=GetActiveOleObject(AppName); //不然返回正在运行的实例自动化工具
Obj1.OlePropertySet("Visible",true);
return Obj1;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int j;
V=GetWordObject();//得到Word 97自动化工具
Application
Vdocuments=V.OleFunction("Documents"); //通过
Application获取Documents工具
if (OpenDialog1->Execute())
//利用Documents工具的Open要领打开文件,并返回Document工具
Vdocument1=Vdocuments.OleFunction("Open",OpenDialog1->FileName);
j=Vdocument1.OleFunction("ComputeStatistics",2);//计较打开文档的页数
Label1->Caption="文件"+Vdocument1.OlePropertyGet("Name")+"页数是:"+
IntToStr(j);
}
//---------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int i,j;
i=tag;
Vactive=V.OleFunction("ActiveDocument");//获取
Application的ActiveDocument工具
j=Vactive.OleFunction("ComputeStatistics",4);//计较当前文档的段落数
//的的Paragraphs荟萃工具增加一段
Vactive.OleFunction("Paragraphs").OleFunction("Add");
i=j+i;// 当前文档被编辑的段落序号
Add(i);//挪用编辑当前勾当文档指定的段落文字的函数
Memo1->Clear();//排除Memo1的内容
tag=tag+1;
}
//---------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
V=GetWordObject();
Vdocuments=V.OleFunction("");
Vdocument2=Vdocuments.OleFunction("Add");//利用
Documents 工具的Add要领新建文档
Vdocument2.OlePropertySet("Password","12345");//配置新建文档的口令
}
//---------------------
void __fastcall TForm1::Add(int i)
{
Variant V1;
//配置被编辑段的内容、字体巨细、颜色及是否斜体
V1=((Vactive.OleFunction("
Paragraphs")).OleFunction("Item",i)).OleFunction("Range");
(V1.OleFunction("Font")).OlePropertySet("Italic",true);
(V1.OleFunction("Font")).OlePropertySet("Size",18);
(V1.OleFunction("Font")).OlePropertySet("ColorIndex",6);
(V1.OleFunction("Font")).OlePropertySet("Size",18);
V1.OlePropertySet("Text",Memo1->Text);
}
//---------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Variant Vshape,Vactive1,Vline;
Vactive1=V.OleFunction("ActiveDocument");
Vshape=Vactive1.OleFunction("Shapes");//获取当前勾当文档的Shapes工具
//利用Shapes工具的AddLine要领化直线
Vline=Vshape.OleFunction("AddLine",90,80,400,80);
if (OpenDialog1->Execute())
//利用Shapes工具的AddPicture要领插入指定位图
Vshape.OleFunction("AddPicture",OpenDialog1->FileName,50,50,80,100);
}
此措施在C++ Builder 3中编译通过,运行该应用措施首先必需得到文档,然后才可以编辑文档。