📄 9930.txt
字号:
中 关 于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")。
---- 以 下 通 过 一 个 简 单 的 例 子, 具 体 说 明 如 何 在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
#include
#include
#include
#include
#include
#include
// - - - - - - - - - - - - -
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
#pragma hdrstop
#include "Unit1.h"
#include
// - - - - - - - - - - - - -
#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 中 编 译 通 过, 运 行 该 应 用
程 序 首 先 必 须 获 得 文 档, 然 后 才 可 以 编 辑 文 档。
****************************************************************
****************************************************************
◆下载专区◆
ActiveZipper OCX 1.0 (24K)
是一用于压缩和解压缩文件的ActiveX组件。你必须安装了IE3.02以上版本
并且建立了与PKZip兼容的文件,程序提供的样本才能工作。
适用于:Visual Basic 4 or 5
下载地址: http://www.iessoft.com/Download/actocx.zip
相关地址: http://www.iessoft.com/scripts/actzip.asp
iEsAllinfo Control (27K)
是一OCX控件可显示系统和驱动器的各种信息。它能显示25种不同的只读属
性,未用空间、已用空间、未用簇、全部可用内存交换文件尺寸、微处理
器等。
适用于:Visual Basic 4 or 5
下载地址: http://www.iessoft.com/Download/iesinfo.zip
相关地址: http://www.iessoft.com/
FastGL 1.22 (280K)
帮你快速便捷的使用C/C++ SVGA资料库。
FastGL致力发展图形加强器应用程序及游戏。你在可MS-DOS下写入资源码
并随后在LINUX或QNX操作系统下编辑,除非原始资料已被改动。此资料库
低水平层面在汇编程序中写出并尽可能使用MMX扩展名。FastGL使用Windows
和结果驱动哲学体系。它支持一个鼠标指针、按键、编辑盒及其他。
下载地址: ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/fastgl12.zip
相关地址: http://mujweb.cz/www/nezmarisko/fastgl.html
Numerics C++ Library 1.1 (43K)
是一个收藏库,收集了进行数字式及统计式计算的常规程序。
收藏在此Numerics C++库中的常规程序是解决线性系统的平衡、乱码产
生、随意性变量的计算估价,以及自然科学及工程学等其他学科也常常
需要的日常程序。包括完整的C++原始编码。
下载地址1: http://www.brent.worden.org/products/numericscpp11.zip
下载地址2: ftp://ftp.simtel.net/pub/simtelnet/msdos/cpluspls/numcpp11.zip
相关地址: http://www.brent.worden.org/products/numericscpp.html
****************************************************************
****************************************************************
◆有问必答◆
★本期回答★
●089. 回答请mailto: yaozheng@kali.com.cn?subject=089
用Borland C++ Builder4 + MS SQL Server7.0; 在程序中用SQL CREATE
了一个table,可是在程序中用Table控件的TableName =CREATE的table 后
却出错,(库里确实生成了这个table);谁能告诉我为什么,如何解决?
lorelei@126.com
答:
CREATE是关键字,不能为表名,换一个名字就可以了。
还有问题E_Mail:ZTlzj@21cn.com。
●1OO. 回答请mailto: yaozheng@kali.com.cn?subject=100
请问怎样在Dephi中模拟一个按键动作,如按下end、enter键等,用Windows
API 函数吗?是不是用keybd_event?怎样用?十分感谢!
dy001@21cn.com
答:
模拟KEY:(TAB/../ENTER...)
PostMessage(Object.Handle, WM_KEYDOWN, VK_TAB, 0);
__________________________________________________________________
★本期提问★
1O3. 回答请mailto: yaozheng@kali.com.cn?subject=103
各位编程高手,现在我要在VC6.0中用到ActiveX VCI Formula One Workbook,
用它来转换Excel格式文件,但是VC中提供的帮助不全,我有许多地方不清楚,
e.g. Read方法仅仅读进一个Worksheet, 多个Workwheets的情况如何处理?而
且我还有其它问题。那位高手曾经做过这方面的工作,或者知道哪本书中有较
详细的关于Formula One的资料,请您赐教。
我的E-mail Address is: tangxiaosheng@yeah.net.
1O4. 回答请mailto: yaozheng@kali.com.cn?subject=104
请问各位先进,如何在NT环境下编程实现使自己的程序不出现在任务列表中?
我在Windows9x下用kernel32.dll中的函数RegisterServiceProcess实现,不
知NT有没有对应的函数? 另外,在Windows9x下有别的方法吗?谢谢!
xyli@km169.net
1O5. 回答请mailto: yaozheng@kali.com.cn?subject=105
你好,我用VC6写个定时程序,可是不知道如何使用SETTIMER,没有VB中方便,
求救!!谢谢
寻找VC高手,拜师学艺。 netpc@126.com
1O6. 回答请mailto: yaozheng@kali.com.cn?subject=106
各位好!我是一名delphi初学者,在数据库方面有几个问题想向大家请教:
如何将一些jpg文件存入数据库中和怎样把他读出并正常显示。谢谢!
韦明 weimingxx@263.net
1O7. 回答请mailto: yaozheng@kali.com.cn?subject=107
我设计了一个数据采集的ISA插卡,想使用外部中断。现请教先生,怎样在
VB5中控制外部中断?谢谢! tttxsbc@public1.sz.js.cn
1O8. 回答请mailto: yaozheng@kali.com.cn?subject=108
在WINDOWS下用BORLAND C不知如何实现一个字符串(长度可能很长,上百字)在
水平方向上从右向左(或反之)缓缓移动,一端移入,另一端移出,即一般所说的
"跑马灯"效果.故请教高人予以指点.若用VB又是如何实现?谢谢。
churung@telekbird.com.cn
提问信箱: yaozheng@kali.com.cn?subject=question
如果您有什么疑难问题,请发到上面的信箱里,我会及时把您的问题放在
杂志上的,希望编程高手们能不吝赐教,也希望这个栏目能成为大家交流
的场所。
****************************************************************
****************************************************************
◆编者的话◆
本刊已加入【CHINA-EZL】中国电子杂志联盟
联盟主页地址 http://china-ezl.yeah.net
◆欢迎光临我的个人主页
●《编程技术》 http://person.zj.cninfo.net/~yao
本刊的同名主页,主要以收集各类编程工具控件和程序源代码为主。
●《C++ Builder世界》 http://cppbuilder.myrice.com
本人最新制作的个人主页,是一个探讨C++ Builder编程的专题
网站,为广大的C++ Builder爱好者搜集关于C++ Builder的一切。
◆《编程技术》订、退方法:
请到本刊主页进行订退工作 http://person.zj.cninfo.net/~yao
如果您觉得这份刊物还不错的话,欢迎把它介绍给您的朋友.
不知道您看了这期刊物有什么想法或者是意见,欢迎向我提出来.
本人感激不尽,我的联系方法如下:
E-mail:yaozheng@kali.com.cn
ICQ#: 43260473
**************************THE END**************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -