第二章 基于WORD的手写批注技术的研究与实现.docx

上传人:b****6 文档编号:8587666 上传时间:2023-01-31 格式:DOCX 页数:13 大小:42.83KB
下载 相关 举报
第二章 基于WORD的手写批注技术的研究与实现.docx_第1页
第1页 / 共13页
第二章 基于WORD的手写批注技术的研究与实现.docx_第2页
第2页 / 共13页
第二章 基于WORD的手写批注技术的研究与实现.docx_第3页
第3页 / 共13页
第二章 基于WORD的手写批注技术的研究与实现.docx_第4页
第4页 / 共13页
第二章 基于WORD的手写批注技术的研究与实现.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

第二章 基于WORD的手写批注技术的研究与实现.docx

《第二章 基于WORD的手写批注技术的研究与实现.docx》由会员分享,可在线阅读,更多相关《第二章 基于WORD的手写批注技术的研究与实现.docx(13页珍藏版)》请在冰豆网上搜索。

第二章 基于WORD的手写批注技术的研究与实现.docx

第二章基于WORD的手写批注技术的研究与实现

第二章基于WORD的手写批注技术的研究与实现

2.1WORD软件的二次开发简介

2.11 VBA是新一代MicrosoftWindows应用软件通用的宏控制语言

许多年来,Microsoft公司一直对新闻界及开发人员暗示,它的长远策略包括一种通用的应用程序编程语言。

这种语言将用于微软的所有应用程序中,它起源于应用得相当广泛的计算机语言——VB。

这种语言将向高级用户及开发人员提供一种应用程序间通用的应用程序语言(也就是宏语言),因而可以减少学习时间和支持费用。

同时这种语言也会为开发人员提供一种开发方法,用于开发集成多个应用程序的系统,即多个应用程序协调工作,以解决实际应用问题。

这个期待已久的语言就是VisualBasicforApplication(简称VBA),包括这种语言的第一个微软产品就是Excel5.0。

VBA为高级用户及开发人员提供了使用最通用的Windows编程语言——VisualBasic的能力,并可以将它应用到Excel和Word的问题中。

它也使得用户可以更容易控制其它Microsoft的应用程序。

由于VBA是新一代MicrosoftWindows应用软件通用的宏控制语言,不但语法简单而且能直接运用相关软件,如Excel,Project,PowerPoint等的各项强大功能。

因此,一旦掌握VBA,使用者就可以在为最终用户定制的应用软件中直接运用上述各项软件的功能,而不必再费时去自行开发。

2.1.2VBA有效地解决了从定型软件应用程序到“软件构造模块”的转变

虽然VBA源于VB,但它成为一个对应用程序几乎没有束缚的独立工具。

VBA不仅仅作为一个宏语言挤进每个应用程序,它还保留一个可以在应用程序间操作的开放编程工具来作为一个结合层。

如在Office中的每个组件除各有专长或侧重点,具有强大的用户定制和模板功能外,对于比较复杂的重复性操作,用户还可以设置宏来代劳。

借助VBA,用户不仅可以完全控制每个Office组件的工作方式,而且可以根据自己的需求制作出一个依托于Office套件,但又不属于任何组件的应用程序。

用户自制的新应用程序不仅可以具有每个组件所包含的字处理、电子表格等固有功能,还可以打破Office套件的界限,与Microsoft公司的其它产品协同工作,从而形成一个组织计算环境的有机整体。

VBA除了实用性特别强外,更重要的是它不但容易学习,而且还能以记录的方式直接将使用者想要的操作记录成程序(其实更确切地说应是VBA程序代码)。

所以,VBA实际上也具备了应用程序生成器的特色和功能。

相信当您接触VBA后,很难不被它如此强大而便利的功能所吸引。

Excel5.0率先采用VBA作为其标准的宏语言,随后Word、PowerPoint都一致采用相同的VBA语法,增加了不同应用程序之间的通用性。

因此无论对程序设计者还是对一般用户而言,有这样一个开放的综合性的应用环境,工作起来将会更加游刃有余。

2.1.3VBA承担了扩展OLE的任务

除了为不同的软件功能的综合应用提供更具体的方案,VBA实际上还附带着一些高级应用。

当你在Microsoft中提到“集成”时,多数人可能认为你在说“OLE”——对象链接和嵌入(ObjectLinkingandEmbedding),它是Microsoft处理一个应用程序包含另一个应用程序的文档的长远标准。

最基本的OLE提供了一种应用程序间交换数据的方法。

VBA承担了扩展OLE的任务,这样你将能像交换数据那样交换命令,这些扩展被称为OLEAutomation,并在OLE2.0中发布。

Excel是第一个完全采用OLEAutomation的应用程序。

有了OLEAutomation的帮助,VBA对于所有使用Office套件的用户来说,更是不可多得的好帮手。

这是因为VBA可以实现您的特殊需求,利用记录VBA程序代码的方式,可以迅速完成一套应用系统,能直接运用Excel来生成数据分析图表,配合Word来编辑业务报告,再通过PowerPoint来设计出高品质的动态简报。

虽然VB及VBA都有一个“Basic”,但是您可别只把它当成Basic语言的“Visual”版来看。

至于VBA与VB到底应当如何区分呢?

您只要有这样一个概念:

VB是一种程序语言,而VBA则不能被归类于程序语言,它虽具有十分完整的程序语言基本结构(与VB十分类似),但事实上它提供的不单单是程序代码而是对MicrosoftOffice各种软件功能的一种综合控制。

因此,相对于VB而言,VBA算是一种面向用户的控制语言。

此外,VBA还具有应用程序生成器的特性。

实际上,VBA的强大开发功能与易用性相结合,实现了从定型软件应用程序到“软件构造模块”的转变。

开发人员可以用它们快速生成大量的用户解决方案,将桌面系统和商业与工业领域的特定应用程序、数据和解决方案集成在一起。

开发人员可以定制并扩展这些应用程序的功能,以便符合特定的业务需求,而不需要从最低层开始开发应用程序。

VBA使得Office不仅仅是一个桌面办公系统,还是一个易学易用的开发平台。

2.1.4VBA开发特点

1、MicrosoftOffice对象模型

VisualBasic是一种面向对象的开发语言。

VBA将MicrosoftOffice中的每一个应用程序都看成一个对象。

每个应用程序都由各自的Application对象代表。

在Word中,Application对象中包容了Word的菜单栏、工具栏、Word命令等的相应对象,以及文档对象等等。

菜单栏对象中包容了所有的菜单及菜单命令。

工具栏对象中包容了各种命令按钮。

文档对象中则包容了所有的文字、表格、图像等文档组成部分的相应对象。

文档对象是MicrosoftWordVisualBasic中的主要对象。

在Excel中,Application对象中包容了Excel的菜单栏、工具栏等的相应对象,以及工作表对象和表对象等等。

工作表对象和图表对象是MicrosoftExcelVisualBasic中的主要对象。

在Access中,Application对象中包容了Access的菜单栏、工具栏等的相应对象,以及报表对象和窗体对象等等。

报表对象和窗体对象是MicrosoftAccessVisualBasic中的主要对象。

在PowerPoint中,Application对象中包容了PowerPoint的菜单栏、工具栏等的相应对象,以及演示文档对象等等。

演示文档对象是MicrosoftPowerPointVisualBasic中的主要对象。

2、基于对象的开发

(1)使用MicrosoftOffice对象

Office已经具有了强大的功能,Office的对象模型使得可以使用MicrosoftOffice中的对象来完成自己的工作。

程序员可以不必浪费时间开发自己的组件,只需充分地利用Office的功能。

Office开发者可以在Office的基础上进行自己的开发,而不必一切从头开始。

例如,Office开发者可以使用Word的拼写检查器,而不必自己来开发一个拼写检查器。

(2)用户创建对象

Office开发者可以在Office对象中创建自己的对象:

可以创建自己的菜单和工具栏,添加到Office的对象集合中;可以创建一个窗体,并且在窗体中添加控件,等等。

例如,在Word中,可以往自动更正的词库中添加自己的词条。

3、VBA开发Office的功用

有人也许觉得Office的功能已经足够强大了,是否还有必要使用VBA来开发Office。

的确,即使根本不用编写一句语句,Office就可以完成用户所能遇到的各种任务。

但是,人们对效率的追求是永不满足的,这就是使用VBA来开发Office的原动力。

(1)VBA可以使Office任务自动化

在使用Office的过程中,往往要遇到一些重复性的系列工作,特别是在处理大批量的文档或数据时。

通过录制宏或使用VisualBasic编写宏,使一系列的工作只需要一个指令便能完成,这就成倍地提高了工作效率。

(2)VBA可以定制Office满足自己的需要

Office是一个功能异常庞杂的软件包,对某一用户来所说,许多命令可能一辈子也用不着,而另外一些命令可能得经常使用。

有时候,功能复杂反而显得多余。

另外,Office的外观显得异常的繁杂,许多用户面对如此繁杂的界面往往手足无措。

通过VBA可以设置自己的界面,把自己经常用到的菜单命令和工具栏放置到显眼的地方,隐藏一些不常用的菜单或工具栏,并且,可以把自己所编写的宏设置为菜单命令或设置为工具栏中的命令按钮,方便了使用。

并且,可以根据自己的需要来定制Office的功能,满足自己的需要。

(3)VBA可以增强Office的功能

Office的功能虽然强大,但它不可能考虑到所有情况,而且情况是千变万化的,各种情况都有特定的要求。

通过VBA可以增强Office的功能,以处理各种各样的任务。

例如,可以设置Word拼写检查的词库;可以往词库中添加新的词语;可以设置自动更正,设置自己经常遇到的误拼等。

(4)VBA可以增强Office与用户的交互

在Office中,可以利用VisualBasic创建窗体,并在窗体中添加控件等用户接口元素。

通过用户接口,应用程序可以得到用户的请求,并对其作出响应。

(5)VBA可以集成Office的功能

Office不是几个软件的简单组合,而成为一个有机的整体发挥巨大的作用。

VisualBasic提供了集成Office的功能的一种手段。

通过OLE(对象的链接和嵌入)和DDE(动态数据交换)技术的使用可以集成Office的功能。

例如,利用VisualBasic,可以在Word文档中链接Excel数据表,调用Excel来对该数据进行处理。

在Excel中处理该数据表,得到结果也要刷新Word文档中的数据表,保持了数据的更新。

这时的文档确切地说应该是一个复合文档。

OLE自动化技术则提供了一种在应用程序中控制源文档的方法。

OLE自动化的优点是,在单一的环境中工作,同时可以使用其他应用程序的功能。

在MicrosoftOffice环境中,利用VisualBasic开发应用程序时,可以利用OLE自动化组合MicrosoftOffice中的多个应用程序,建立自动化应用程序。

MicrosoftOffice提供了大量的材料,只需把它们拼凑起来。

2.1.2MicrosoftWordVBA对象结构图

MicrosoftWord提供给编程人员的资源非常丰富,其中最常用的是Word的各种对象,下面给出Word的对象结构图。

 

2.2屏幕手写技术的研究与屏幕手写方案设计

在公文系统中实现公文的批注以及会签主要涉及两个主要的技术难点,其一是如何实现仿纸操作;其二是如何实现自由曲线。

2.2.1为什么需要屏幕手写技术

随着各行业信息化程度的提高,办公自动化(OA)在政府机关、企事业单位的应用越来越普及。

但在群体办公条件下,对流转的公文进行保留痕迹的修改或批注,以往还缺少有效的手段。

纸质文档无法从现实的办公自动化环境中退役,秘书必须手持公文奔走于各部门之间,从某种意义上讲,还是在降低着工作的效率。

现在虽然许多单位都实施了无纸办公,但是其中的OA系统却总不令人满意,结果换了又换,主要原因是OA系统提供的应用平台不便于领导的使用,与事前预想的应用相差甚远。

业内人士戏言:

"只因少了一支笔,自动化变成了白动化"。

各种现实条件要求我们开发出手写文档电子化解决方案,即所使用的电子手写笔可以在任何书写平面上书写,并且同步将您书写的信息传送到计算机中。

也就是说,您可以用笔与计算机对话。

"手写文档电子化"的技术包括三个流程:

●首先,用电子手写笔在普通纸或任何书写平面上,按照原有的书写习惯手写批注和签名。

●然后,将电子手写笔输入的内容进行加工,捆绑在相关的电子文档上。

●最后,使用不可逆转的文件格式,来确保电子文档的存储和发布的安全。

 

 

2.2.2解决方案的提出

"手写文档电子化"的第一部就是要实现在计算机屏幕上的屏幕书写技术,为了能够保留屏幕上的修改和批注的痕迹,必须要做到以下两点:

首先必须在计算机屏幕上提供给批示人一个可以进行手写批注的平面,这个平面必须是位于要批注的文档之上,同时批示人又能够透过该平面看到需要批示的文件内容。

其次因为每个汉字是由很多的比划构成,而每一个笔划各异,无规律可循,不能用某一种规则的图形来表示。

因此只有通过自由曲线来表示汉字中的比划。

所以必须要实现在前面提到的屏幕上绘制自由曲线。

基于以上两点要求,我设计了以下解决方案:

1、首先在一个窗体打开需要批示的文件;

2、创建另一个窗体,设置这个新创建的窗口的父窗口句柄为打开文件的窗口,同时通过重载此子窗体的FormCreate事件处理函数,实现该窗体的透明。

这就保证了次子窗体能够随父窗体的移动而移动,同时批示人可以通过这个子窗体看到需要批示的文件的内容;

3、当批示人使用手写笔接触到手写板时或者按下鼠标时,开始纪录下批示人移动手写笔(鼠标)的轨迹,同时在第二步创建的窗体上绘制出手写笔的移动轨迹,直到批示人使手写笔(鼠标)离开手写板为止。

这样就记录下了批示人批示的一个笔划的自由曲线所有坐标;

4、当批示人使手写笔离开手写板的时候,取出第三步记录下的一笔的坐标轨迹,将该笔批示通过Word中绘制自由曲线的宏添加到Word文件中。

因为第三步记录下的一笔的轨迹坐标是基于第二步中创建的透明子窗体的,为了在Word中绘制自由曲线是保证笔划位置的正确,所以必须把它转化为基于第一步中的打开文件的窗体下的坐标;

5、重复3、4两个步骤,直到批示结束。

为了实现以上的方案,需要解决三个技术问题,分别是绘制透明窗体,在WORD中绘制自由曲线以及批示窗体与文件窗体的坐标转化。

下面分别介绍这三个技术问题的解决。

2.3透明窗体的绘制

实现绘制透明窗体的方法很多,每一种方法都有各自的优点与弊端,在不同的应用环境下,需要选择不同的方法实现。

2.3.1常见的一种方法

常见的方法是通过在一个窗体上放置一个位图控件,并让改位图控件占满整个窗体,在创建窗体之前把当前屏幕上的内容扑捉到一副位图中保存起来,在创建窗体时将前面扑捉到的位图绘制到窗体的位图控件中,实现该窗体的内容与创建前桌面上的内容完全一致。

这种方法在屏幕截图软件中经常用到。

方法的实现:

(1)定义一个获取屏幕位图的函数,函数定义如下:

functionGetScreen():

TBitMap;

var

ScreenPic:

TBitMap;

Begin

ScreenPic:

=TBitMap.Create;

BitMap.FreeImage;

BitMap.Width:

=GetSystemMetrics(SM_CXSCREEN);{Screen.Width}

BitMap.Height:

=GetSystemMetrics(SM_CYSCREEN);{Screen.Height}

BitBlt(BitMap.Canvas.handle,0,0,BitMap.Width,BitMap.Height,GetDc(0),0,0,SRCCOPY);

Result:

=ScreenPic;

end;

(2)在需要设置位透明的窗体内放置一个TImage的控件,并把该窗体与该控件扩展至全屏,然后在创建窗体时调用第一步中的GetScreen函数,将该函数的返回值赋给窗体上的TImage控件,实现代码如下:

GetScreen(ScreenPic);

FormPic.ImagePic.Picture.Bitmap.Assign(ScreenPic);

withFormTransParentdo

begin

BorderStyle:

=bsNone;

WindowState:

=wsMaximized;

Position:

=poScreenCenter;

Visible:

=True;

end;

这种方法的缺点是程序运行期间,需要在内存中保存一副位图,这样占用的内存空间比较大,对程序的性能有影响。

2.3.2优化的方法

在windows2000下增加了一些新的API函数,可以轻易的实现透明或者半透明的窗体,利用这些API函数生成透明窗体的方法既简单又能够节约系统资源,提高程序的运行效率,比第一种方法有很大改进。

实现透明窗体的函数主要包括:

LONGGetWindowLong(

HWNDhWnd,//handleofwindow

intnIndex//offsetofvaluetoretrieve

);

LONGSetWindowLong(

HWNDhWnd,//handleofwindow

intnIndex,//offsetofvaluetoset

LONGdwNewLong//newvalue

);

BOOL SetLayeredWindowAttributes(      

HWND hwnd,

COLORREF crKey,

BYTE bAlpha,

    DWORD dwFlags

);

利用上面三个函数,通过重写需要透明的窗口的FormCreate函数就可以实现窗体的透明,代码如下:

procedureTFormTransParent.FormCreate(Sender:

TObject);

varOldStyle:

LongInt;

begin

OldStyle:

=GetWindowLong(Handle,GWL_EXSTYLE);

OldStyle:

=OldStyleOrWS_EX_LAYERED;

SetWindowLong(handle,GWL_EXSTYLE,OldStyle);

SetLayeredWindowAttributes(handle,0,180,LWA_ALPHA);

end;

SetLayeredWindowAttributes的第二个和第三个参数是指定透明颜色的参数,当第二个参数为0时,设置第四个参数的值(alpha值),从0到255表示需要窗体透明的程度,将第四个参数设置为255表示窗体不透明,设置为0表示完全透明,设置为0到255之间的值表示部分透明。

2.4通过VBA在WORD中绘制自由曲线

利用VBA在WORD中绘制自由曲线主要是通过三个方法来实现,下面对这三个方法的功能、参数和返回值进行详细的几介绍。

(1)BuildFreeform方法,此方法建立一个任意多边形对象。

返回一个FreeformBuilder对象,该对象代表正在建立的任意多边形。

用AddNodes方法向任意多边形添加线段。

当您向任意多边形中添加了至少一条线段后,就可以用ConvertToShape方法将FreeformBuilder对象转化成Shape对象,此对象具有FreeformBuilder中定义的几何描述特性。

方法的说明如下:

expression.BuildFreeform(EditingType,X1,Y1)

参数与返回值说明:

expression  必需。

表示该表达式返回一个Shapes对象。

EditingType  必需。

表示第一个节点的编辑属性。

EditingType  可以是下列MsoEditingType常量之一:

msoEditingAuto

msoEditingCorner

X1,Y1  Single类型,必需。

表示任意多边形第一个顶点相对于文档左上角的位置。

(2)AddNodes方法,本方法将新线段插入到正在创建的任意多边形的尾部,并添加顶点以定义此线段。

如果需要,可反复使用此方法将顶点添加至正在创建的任意多边形。

添完顶点后可用ConvertToShape方法来创建刚才定义的任意多边形。

若要为已创建完的任意多边形添加顶点,请用ShapeNodes集合的Insert方法。

此方法的说明如下:

expression.AddNodes(SegmentType,EditingType,X1,Y1,X2,Y2,X3,Y3)

参数与返回值说明:

expression必需。

该表达式返回一个FreeformBuilder对象。

SegmentType必需。

表示要添加的线段的类型。

SegmentType可以是下列MsoSegmentType常量之一:

msoSegmentLine

msoSegmentCurve

EditingType必需。

顶点的编辑属性。

如果SegmentType属性为msoSegmentLine,则EditingType属性必须为msoEditingAuto。

EditingType可以是下列MsoEditingType常量之一:

msoEditingAuto

msoEditingCorner

X1Single类型,必需。

如果新线段的EditingType属性为msoEditingAuto,则此参数指定从文档左上角到新线段终点的水平距离(以磅为单位)。

如果新顶点的EditingType属性为msoEditingCorner,则此参数指定文档左上角到新线段第一个控制点的水平距离(以磅为单位)。

Y1Single类型,必需。

如果新线段的EditingType属性为msoEditingAuto,则此参数指定从文档左上角到新线段终点的垂直距离(以磅为单位)。

如果新顶点的EditingType属性为msoEditingCorner,则此参数指定文档从左上角到新线段第一个控制点的垂直距离(以磅为单位)。

X2Single类型,可选。

如果新线段的EditingType属性为msoEditingCorner,则此参数指定从文档左上角到新线段第二个控制点的水平距离(以磅为单位)。

如果新线段的EditingType属性为msoEditingAuto,则可忽略此参数。

Y2Single类型,可选。

如果新线段的EditingType属性为msoEditingCorner,则此参数指定从文档左上角到新线段第二个控点的垂直距离(以磅为单位)。

如果新线段的EditingType属性为msoEditingAuto,则可忽略此参数。

X3Single类型,可选。

如果新线段的EditingType属性为msoEditingCorner,则此参数指定从文档左上角到新线段终点的水平距离(以磅为单位)。

如果新线段的EditingType属性为msoEditingAuto,则可忽略此参数。

Y3Single类型,可选。

如果新线段的EditingType属性为msoEditingCorner,则此参数指定从文档左上角到新线段终点的垂直距离(以磅为单位)。

如果新线段的EditingType属性为msoEditingAuto,则可忽略此参数。

 

(3)ConvertToShape方法,创建一个图形,该图形具有指定对象的几何图形特征。

返回一个Shape对象,该对象代表新图形。

方法的说明如下:

expression.ConvertToShape(Anchor)

expression必需。

表示该表达式返回的一个FreeformBuilder对象。

AnchorVariant类型,可选。

Range

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1