前期,我给大家分享过在Excel中实现用仪表盘方式动态瞬时监测内存使用状态信息的功能,根据粉丝的反响,感觉还不错吧,有粉丝建议我能不能直接用PowerPoint弄一个这种功能的监测仪表盘呢?本来想,很简单的,无非就是代码的移植修改,但是事后想了想,尽管我看起来简单,但是各位网友未必都如此认为。
于是乎今天,我再次跟大家分享在PowerPoint环境下实现了同样的功能吧!好了,我们现在就来分享我的实现吧!
一、仪表盘和仪表指针的制作
(一)仪表盘的制作
我们可以在PowerPoint中建立一个半圆饼图图表。如下图所示
![46fc5d3b72d70d3d122c4e7391662f76.png](https://i-blog.csdnimg.cn/blog_migrate/ed1decd12c3cbfebfef65c82565bb92e.jpeg)
图1 半圆饼图图表
为该半圆饼图图表设置数据标签,并设置各系列数据标签在图表上的适当位置、标签文字大小等。如下图所示
![12acf70626efd183ae9802edde48dbaf.png](https://i-blog.csdnimg.cn/blog_migrate/38e96f3812424f0e762a3b8f16c25b10.jpeg)
图2 半圆饼图数据标签设置
打开一个新的PowerPoint环境,复制刚才的半圆饼图到本演示文档的环境中来,用QQ截图的方式将半圆饼图截图,并对齐原图表,绘制一个与半圆饼图同心但半径略小的圆。如下图所示
![b62a99c5b41fdf1e7ad3dc3ad3ccf77d.png](https://i-blog.csdnimg.cn/blog_migrate/9d29a2646c338940e37cc3fc9ceddfb0.jpeg)
图3 同心的绘制圆和截图
接着,给半圆图表截图用透明色去背景,然后按住键依次选中截图的半圆图表、绘制的同心圆,再用PowerPoint的合并图形的剪裁功能。如下图所示
![e6917e35aee3119c4e3a48e1f5bd7b5b.png](https://i-blog.csdnimg.cn/blog_migrate/777f393b0465d8d06b236c982b8989da.jpeg)
图4 选择合并图形功能
执行上图的裁剪功能后,将得到仪表盘。如下图所示
![2e5193b4da397e42369492901a1435bb.png](https://i-blog.csdnimg.cn/blog_migrate/f1a19aab26df1216a44c012347ac4b40.jpeg)
图5 用PowerPoint合并成的仪表盘图形
最后,将这个制作的仪表盘图形复制到本PowerPoint中去。
(二)仪表盘指针的制作
同样在刚才那个新环境的PowerPoint中绘制仪表盘指针,主要采用绘制三个图形:小黑圆、等腰梯形两个;通过对齐、组合的变化,将组合的图形旋转中心对齐到小黑圆的中心。如下图所示
![dd2832b3062c203272ccdc25589ca08f.png](https://i-blog.csdnimg.cn/blog_migrate/6ebbe8e2c25fa4c02284a9a24c03c2a5.jpeg)
图6 绘制好的仪表指针
然后,复制改仪表指针图形到本PowerPoint中去。
(三)仪表的部件图形命名
图形的命名很重要,方便通过图形名称使用。为此,我们将仪表盘和指针分别复制了一份,将第一份规定为物理内存使用状态的仪表(仪表盘名称“仪表盘_物理”,指针名称“仪表指针_物理”),将第二份规定为虚拟内存使用状态的仪表(仪表盘名称“仪表盘_虚拟”,指针名称“仪表指针_虚拟”)。最后的仪表效果如下图所示
![9f0030396d329ab878e5df72013feb88.png](https://i-blog.csdnimg.cn/blog_migrate/d8f786c7c1a2eee718fa0c1b7472efae.jpeg)
图7 物理、虚拟仪表
二、PowerPoint前端界面其他部件布局
添加四个ActiveX标签控件、两个ActiveX按钮、两个ActiveX文本框。整体布局如下图所示
![e2bc8b44cd55961e6fb545e33330bc0b.png](https://i-blog.csdnimg.cn/blog_migrate/3a4b49d00c8abf4b7ba2519b148cbfa9.jpeg)
图8 PowerPoint前端界面整体布局
三、实现仪表动态监测内存使用状态的功能代码
标准模块----模块1中的代码:
'声明GlobalMemoryStatus函数,需要在该模块(如“模块1”等)顶部增加一条语句,该语句通知Visual Basic GlobalMemoryStatus函数 _
的功能以及它需要哪些类型的参数。该函数所需的参数名是lpBuffer,双字符前缀lp指明该参数是长整型指针,指向收集来的系统内存用 _
法信息的存放位置的内存地址,该参数没有使用VB标准数据类型(比如:Integer、String或Boolean类型等),而是使用称之 _
为“MemoryStatus”的用户自定义类型来声明,在访问GlobalMemoryStatus函数之前,必须在标准模块中声明一个MemoryStatus类型的全 _
局变量,这样才能把信息传递给GlobalMemoryStatus函数并返回结果。该类型包含8个数值分量,用来指明计算机中物理内存和虚拟内存的 _
状态。而MemoryStatus类型在API访问期间保持数据的聚集(MemoryStatus类型保存调用GlobalMemoryStatus函数时收集的数据)
Public Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MemoryStatus)
'定义一个公有的“内存状态”MemoryStatus类型的结构,其成员包括如下内部所示,成员前面冠以的“dw”意思是“double words双字符”
Public Type MemoryStatus
dwLength As Long '存放“内存状态”MemoryStatus类型的“长度”(长整型Long)
dwMemoryLoad As Long '内存使用载入的数量(长整型Long)
dwTotalPhys As Long '“内存状态”类型的“总共的物理内存”成员:dwTotalPhys(长整型Long)
dwAvailPhys As Long '“内存状态”类型的“可获得(即可用的)的物理内存”成员:dwAvailPhys(长整型Long)
dwTotalPageFile As Long '“内存状态”类型的“总共的分页文件字节数”成员:dwTotalPageFile(长整型Long)
dwAvailPageFile As Long '“内存状态”类型的“可获得(即可用的)的分页文件字节数”成员:dwAvailPageFile(长整型Long)
dwTotalVirtual As Long '“内存状态”类型的“总共的虚拟内存”成员:dwTotalVirtual(长整型Long)
dwAvailVirtual As Long '“内存状态”类型的“可获得(即可用的)的虚拟内存”成员:dwAvailVirtuall(长整型Long)
End Type
'定义公有类型的内存信息对象memInfo(类型为MemoryStatus),仪表工作状态标志flag
Public memInfo As MemoryStatus, flag As Boolean
'定义公有类型的物理内存仪表盘Shp_Panel_Phys和物理内存指针Shp_Meter_Hand_Phys图形对象
Public Shp_Panel_Phys As Shape, Shp_Meter_Hand_Phys As Shape
'定义公有类型的虚拟内存仪表盘Shp_Panel_Virt和虚拟内存指针Shp_Meter_Hand_Virt图形对象
Public Shp_Panel_Virt As Shape, Shp_Meter_Hand_Virt As Shape
Sub OnSlideShowTerminate() '活动放映结束或强行按了键终止放映的触发事件
MsgBox "您不想继续监测电脑内存状态啦,谢谢使用,再见!