




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
将摄像头拍照功能引入到Word中来源:chinalaohu 发布时间:2009-3-21 7:51:15 查看次数:77Visual Basic for Applications(简称VBA)作为一种标准的宏语言,是从Visual Basic for Windows 发展而来的。它也是一种面向对象的高级语言。熟悉VB的人可以迅速上手。VBA的引入使得Office软件功能更加的个性化,应该说Office软件系列如Word、Excel、Powerpoint、Access等都支持VBA。VBA语言通过Office软件提供的Visual Basic编辑器里写入,以宏的形式在Office中运行。Visual Basic编辑器里可以支持VBA语言书写。可以说这种语言从语法上和VB无异。但是很多VB支持的控件VBA不并支持。 笔者在具体的实例设计中,发现VBA不支持的控件几乎都带有hwnd(句柄)属性。比如VB中支持的PictureBox控件带有hwnd属性。因为这些控件属于Windows系统控件,而VBA不支持Windows的系统控件。VBA支持由Form20.dll提供的ATL控件类库,当然也可以添加其他的控件。但是很多其他控件插入office环境中以后,不能正确使用,有的只能以图标的形式来体现,有的还是需要后台VBA宏代码支持。 本例要实现在Word中进行摄像头拍照的宏实例。设计思想是:在Word中新建任何一个文档,在插入点处,单击工具菜单下的摄像头拍照选项。均能打开摄像头捕获窗口,单击捕获按钮,获得捕获后的图片,并插入该图片到Word的插入点处。下面对具体的设计过程来详细谈一谈: 首先,由于Word考虑到文档的安全性,尤其宏的安全性,故而其默认级别为高级别。这一点可以通过工具菜单下宏-安全性菜单项,打开安全性对话框就可以看到。为了保证本项目宏的正确运行,我们将宏的安全级别设为低。但读者不仅要问,万一中了宏病毒么办,这就是一个问题。我们假设你的计算机安装好杀毒软件,并保证随时更新病毒库。我想一般的读者这一点均可以做到。在这样的前提之下,我们就可以放心使用宏了。于是,我们打开宏管理器,输入一个宏的名称,如Camera,单击创建按钮。这时就自动打开Visual Basic编辑器。 其次,根据我们的设计思想,我们需要在工具栏中添加一个名称为摄像头拍照的菜单项。为了保证我们每次打开本宏的时候,只有这样一个菜单项,不至于出现重复的菜单项,在添加之前,先检查该项时候存在,如果存在先删除该菜单项。代码如下: Dim newitem As CommandBarControl For Each newitem In CommandBars(Tools).Controls If newitem.Caption = 摄像头拍照 Then newitem.Delete Next Set newitem = CommandBars(Tools).Controls.Add(Type:=msoControlButton) With newitem .BeginGroup = True .Caption = 摄像头拍照 .OnAction = addnewpics End With 接下来,就要编写核心代码了。我们考虑程序的通用性和VBA自身的特点,我们将拍照程序cam.exe,实现利用VB写好。并把Cam.exe安装到Windows系统System32路径下。该程序拍照完后,在程序路径下自动生成tmp.bmp文件。在VBA环境中,首先调用该cam.exe程序,并等待程序运行结束,直到收到程序运行结束以后,才将tmp.bmp文件以图片(Shape)的形式插入到Word的当前插入点处。 VB写的Cam.exe核心代码如下: If Cam.SaveDIB(App.Path + tmp.bmp) = True Then Set pp.Picture = LoadPicture(App.Path + tmp.bmp) pictemp.Width = 110 pictemp.Height = 140 pictemp.PaintPicture pp.Picture, 0, 0, pictemp.Width, pictemp.Height, (x_width - Cam.Width) / 2, (y_height - Cam.Height) / 2, Cam.Width, Cam.Height, vbSrcCopy Kill App.Path + tmp.bmp SavePic App.Path + tmp.bmp SavePic保存图片模块,具体参见源代码 End If VBA本部分核心代码如下: 获得系统system32路径: Dim lstr As String lstr = Space(260) If iType = 1 Then GetSystemDirectory lstr, 260 a_GetDirectory = Left(lstr, InStr(lstr, Chr(0) - 1) Else GetWindowsDirectory lstr, 260 a_GetDirectory = Left(lstr, InStr(lstr, Chr(0) - 1) End If 监控程序是否运行和结束,采用类1来实现。类1的核心模块如下: Public Function StartProgram(ByVal ProgramName$) As Long ret& = CreateProcessA(0&, ProgramName$, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc) StartProgram = ret& End Function Public Sub KillProgram() ret& = TerminateProcess(proc.hProcess, 1) End Sub Public Sub WaitForProgramToEnd() Dim RetVal As Long This line of code will wait for an infinite amount of time until the spawned app closes Not good if GUI involved RetVal = WaitForSingleObject(proc.hProcess, INFINITE) RetVal = 1 Do Until RetVal = 0 RetVal = WaitForSingleObject(proc.hProcess, 750) DoEvents: DoEvents: DoEvents: Loop End Sub 在VBA引用、运行和cam.exe程序,并等待程序运行结束: Dim s As String Dim x As New 类1 s = a_GetDirectory(1) + cam.exe x.StartProgram s x.WaitForProgramToEnd 最后插入由cam.exe所生成的tmp.bmp文件: Dim fso Set fso = CreateObject(Scripting.FileSystemObject) If fso.FileExists(a_GetDirectory(1) + tmp.bmp) = True Then Selection.InlineShapes.AddPicture a_GetDirectory(1) + tmp.bmp, , , Selection.Range 经过以上设计,一个在Word中直接利用摄像头的拍照的程序就基本上实现了。算下来的任务就是如何将本程序功能扩展到其他的Word文档中。 具体方法如下:将以上文件另存为模板文件Camera.dot。以后每新建一个wo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国工业氮气设备市场调查研究报告
- 智能化运维-洞察阐释
- 2025年中国气压升降椅市场运营态势及发展前景预测报告
- 智能仓储系统在包装行业的应用研究-洞察阐释
- 2025年石膏矿市场调查报告
- 市猫儿沟水库工程融资投资立项项目可行性研究报告(齐鲁咨询)
- 织晴纶布行业深度研究分析报告(2024-2030版)
- 编程语言安全性分析-洞察阐释
- 家电供应链管理与成本优化研究-洞察阐释
- 2025年中国水务环保设备行业市场全景分析及投资策略研究报告
- 医学影像诊断学 病例读片六
- 音乐烧烤节策划案
- 2023-2024学年浙江省温岭市初中语文七年级下册期末高分通关提分题
- 外科病应急预案嵌顿疝病人应急预案
- JJF 1069-2012 法定计量检定机构考核规范(培训讲稿)
- 加油站有限空间安全警示牌
- 安全员的任职条件及职责
- 资产评估收费管理办法(2023)2914
- 出师表标准注音版修正版
- 篮球比赛记录表A4版
- 小儿清热止咳口服液产品知识-课件
评论
0/150
提交评论