最近在头条上看到有人用所谓的仪表盘制作饼图问题。看起来功能上实现了,但界面的外观上我真的觉得太差了。特别是那个仪表指针方向不对。幸运的是,功能基本实现了。这些只是我个人的观点,说得不对,请多多原谅那个网友!

今天,我也和大家分享我用仪表板制作的东西。但是?不是图表,而是实际上用仪表盘制作的动态瞬间监控计算机内存使用状态的过程!需要说明的是,仪表板和指针是我自己手工制作的,并尽可能以模拟的形式再现仪表盘的动态工作过程。(大卫亚设)。

我用Excel和PowerPoint两个组件分别实现了相同的功能。这次作品将以Excel环境为基础。好吧,我们现在分享我的实现吧!

一、仪表板和仪表指针的制作

(a)制作仪表板

可以在Excel中创建半圆形饼图。如下图所示

图1半圆饼图

设置半圆饼图的数据标签,并在图表中设置每个数据标签系列的适当位置、标签文字大小等。如下图所示

图2设置半圆形饼图数据标签

打开PowerPoint环境,将刚才的半圆饼图复制到此环境中,使用QQ屏幕截图捕获半圆饼图,对原始图表进行排序,以绘制与半圆饼图同心但半径略小的圆形。如下图所示

图3同心绘制圆和截图

然后,在半圆形图表屏幕截图中以透明颜色删除背景,然后按住Shift键,依次选择屏幕截图中的半圆形图表、绘制的同心圆和PowerPoint的合并图形裁剪功能。如下图所示

图4合并图形功能选择

执行上图的裁剪功能后,可以获得仪表盘。如下图所示

图5集成到PowerPoint的仪表板图形

最后,将此制作的仪表板图形复制到excel中。

(b)仪表板指针的生产

另外,在PowerPoint中绘制仪表盘指针。主要画小黑圆、等腰梯形两三个图形。通过对齐和组合更改将组合图形旋转中心与黑色小圆的中心对齐。如下图所示

图6绘制的仪表指针

然后将仪器指针图形复制到Excel中。

(c)仪器组件图形命名

图面名称很重要,以便于用作图面名称。为此,分别复制了仪表盘和指针,复制了规定为物理内存使用状态的第一个仪表盘(仪表盘名称“仪表盘_物理”,指针名称“仪表盘指针_物理”)和指定为虚拟内存使用状态的第二个仪表盘(仪表盘名称“仪表盘_虚拟”),最后的仪表效果如下图所示。

图7物理、虚拟仪器

二、Excel前端接口其他组件布局

添加两个标签控件、两个表单按钮和两个文本

框。整体布局如下图所示

图8 Excel前端界面整体布局

三、实现仪表动态监测内存使用状态的功能代码

标准模块----模块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 Run_Memory_Using_State_Test() '运行内存使用状态测试过程

Dim PhysUsed, VirtUsed '定义已使用的物理内存PhysUsed变量和已使用的虚拟内存VirtUsed变量

'为物理内存仪表盘和仪表指针图形对象指派具体的图形

Set Shp_Panel_Phys = Sheets(1).Shapes("仪表盘_物理")

Set Shp_Meter_Hand_Phys = Sheets(1).Shapes("仪表指针_物理")

'为虚拟内存仪表盘和仪表指针图形对象指派具体的图形

Set Shp_Panel_Virt = Sheets(1).Shapes("仪表盘_虚拟")

Set Shp_Meter_Hand_Virt = Sheets(1).Shapes("仪表指针_虚拟")

flag = True

Do While flag

'事先确定内存信息对象的成员:dwLength的长度

memIn = Len(memInfo)

'以瞬时方式调用Win32的API接口“全局内存状态”函数GlobalMemoryStatus,捕获内存各个状态参数以便使用

Call GlobalMemoryStatus(memInfo)

'然后再开始利用其返回值给控件赋值

PhysUsed = memIn - memIn '已使用的物理内存=总共的的物理内存-可使用的物理内存

phys_mem_used = PhysUsed / memIn * 100 '物理内存瞬时占用百分数量

Sheets(1).Cells(3, 4) = "瞬时物理内存占用[" & phys_mem_used & "%]"

S = 0 + (180 / 20) * (phys_mem_used / 5) '物理内存仪表盘指针瞬时偏转

Sheets(1).Label1.Caption = "物理内存已使用: " & Format(PhysUsed / memIn, "0.00%")

VirtUsed = memIn - memIn '已使用的虚拟内存=总共的的虚拟内存-可使用的虚拟内存

virt_mem_used = VirtUsed / memIn * 100 '虚拟内存瞬时占用百分数量

Sheets(1).Cells(3, 13) = "瞬时虚拟内存占用[" & virt_mem_used & "%]"

S = 0 + (180 / 20) * (virt_mem_used / 5) '虚拟内存仪表盘指针瞬时偏转

Sheets(1).Label2.Caption = "虚拟内存已使用: " & Format(VirtUsed / memIn, "0.00%")

delay 0.001 '每隔0.001秒捕获一次内存状态信息

Loop

End Sub

Sub Stop_Memory_Using_State_Test() '终止内存状态使用情况测试

'为物理内存仪表盘和仪表指针图形对象指派具体的图形

Set Shp_Panel_Phys = Sheets(1).Shapes("仪表盘_物理")

Set Shp_Meter_Hand_Phys = Sheets(1).Shapes("仪表指针_物理")

'为虚拟内存仪表盘和仪表指针图形对象指派具体的图形

Set Shp_Panel_Virt = Sheets(1).Shapes("仪表盘_虚拟")

Set Shp_Meter_Hand_Virt = Sheets(1).Shapes("仪表指针_虚拟")

S = 0 '物理内存仪表盘指针复位

S = 0 '虚拟内存仪表盘指针复位

Sheets(1).Cells(3, 4) = "瞬时物理内存占用[ %]"

Sheets(1).Label1.Caption = "物理内存已使用: 0.00%"

Sheets(1).Cells(3, 13) = "瞬时虚拟内存占用[ %]"

Sheets(1).Label2.Caption = "虚拟内存已使用: 0.00%"

flag = False

End Sub

Sub delay(t As Single)

Dim t1 As Single

t1 = Timer

Do

DoEvents

Loop While Timer - t1 < t

End Sub

四、测试仪表动态监测内存使用状态的效果

(一)点击<测试内存情况>按钮进入内存使用状态测试:会发现各项数据都在动态监测中不断变化,更重要的是仪表指针也在颤动着变化。如下图所示

图9 动态监测下的数据和仪表的变化

(二)点击<终止内存测试>按钮,即刻终止动态监测内存使用状态信息的工作:重要的标志是数据清零、仪表指针回归零档位。如下图所示

图10 终止动态监测内存的结果

五、技术亮点小结

(一)利用半圆图表制作仪表盘(注:半圆图表实际上是通过各系列的正常百分比总值数据100%和与其等值100%的辅助数据生成实现的):用截图+自选图形在PowerPoint中合并生成仪表盘

(二)利用组合多个图形实现旋转中心的位置设定

(三)调用Win32 API接口函数实现底层访问获取计算机内存使用状态信息,并使用这些信息参数(具体见代码中的详细备注)

(四)用自定义延时过程形式实现内存的动态瞬时监测(具体见代码中的详细备注)

好了,本期作品就跟大家分享到这里,希望各位通过本作品再次感受下office的高级应用的强大功能,也更希望有兴趣的朋友继续关注我下期即将出品的视频解说!

好了,希望大家持续地关注(头条号:跟我学office高级办公)、推广和点评哦!谢谢!

1.《【怎么查看excel内存】标题句-使用仪表板在Excel中动态监视内存状态》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【怎么查看excel内存】标题句-使用仪表板在Excel中动态监视内存状态》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/2492524.html