大家好,今天我准备给大家分享一个关于在PowerPoint放映时ActiveX控件背景透明的问题,也许很多朋友很说,这有何难?设置其属性不就得了。比如可以通过下面常规的方法进行设置。
方法一:通过属性窗口设置
图1 通过属性窗口设置ActiveX控件背景透明
方法二:通过后台代码的形式
图2 通过后台代码形式设置ActiveX控件背景透明
上面的操作,从道理上讲是没错的,但是我指的是谁PPT放映时,是否能够绝对保证根据ActiveX控件背景之前设置的透明属性呈现ActiveX控件背景透明效果呢?其实,不然。根据我的尝试,虽然可以事前对ActiveX控件背景进行透明属性设置,但往往放映时,这个ActiveX控件背景依然存在。
怎么办呢?根据我个人的探索尝试,可以借助动态获取ActiveX控件所在的幻灯片背景色,让这个背景色去填充ActiveX控件背景的形式,从“效果”上达到ActiveX控件背景透明的效果。
下面,我们就来讲讲如何实现吧!
一、在PPT中插入几个ActiveX控件的界面布局
图3 PPT中插入的ActiveX控件
二、从VBA后台实现ActiveX控件背景透明的功能代码
模块1中的代码:
Public Control_Original_BackColor_Value 'Control_Original_BackColor_Value--控件的原始背景色
Public Control_Original_ForeColor_Value 'Control_Original_ForeColor_Value_Value--控件的原始前景色
Sub OnSlideShowPageChange() '演示文档放映时即刻触发的事件
'如果当前播放的演示文档的幻灯片显示窗口的预览下,当前的显示定位为第一张幻灯片时,做一次初始化试题工作(这样就避免了每张幻灯 _
片跳变都要执行无谓的浪费资源式的初始化工作)
Set_ForeColor_Value = ActivePresentation.SlideMaster.Shapes(1).Fill.ForeColor.RGB '控件文字即将被设置的颜色为母版文字颜色
If ActivePresentation.SlideShowWindow.View.CurrentShowPosition = 1 Then
Dim ctr_single As Shape 'ctr_single为ActiveX控件(特别注意的是:PowerPoint幻灯片上面的控件皆作为图形的形式访问,要访问这 _
些“图形”式的ActiveX控件的属性必须采用“图形对象.OLEFormat.Object.属性”的形式进行)
Set ctr = Slide1.Shapes(1)
Control_Original_BackColor_Value = ctr.OLEFormat.Object.BackColor '存储原始背景色
Control_Original_ForeColor_Value = ctr.OLEFormat.Object.ForeColor '存储原始前景色
ControlType_Arr = Array("Label", "OptionButton", "CheckBox")
ControlName_Arr = Array("标签", "单选钮", "复选框")
c = Slide1.Background.Fill.ForeColor.RGB '提取当前幻灯片的背景色,存入临时变量c中
For i = 1 To Slide1.Shapes.Count '由Slide1.Shapes.Count统计图形的形式简洁统计出多少个控件
Set ctr = Slide1.Shapes(i)
tn = TypeName(ctr.OLEFormat.Object)
p = Pos_In_A_Array(tn, ControlType_Arr)
If p <> -1 Then
Control_Prompt_Str = "第" & i & "个ActiveX控件“" & ControlName_Arr(p) & "”,类型[" & tn & "]" & Chr(10) & "背景色将被设为与所在幻灯片颜色同色(即控件背景色形式上的“透明”效果)"
MsgBox Control_Prompt_Str, vbInformation, "设置提示"
ctr.OLEFormat.Object.BackColor = c '设置控件的背景色为当前幻灯片的背景色(即形成表面上的“背景透明”效果)
ctr.OLEFormat.Object.ForeColor = Set_ForeColor_Value '设置控件的文字颜色自适应为幻灯片母版文字颜色
End If
Next
End If
End Sub
Sub OnSlideShowTerminate() '幻灯片终止放映后触发恢复控件原有颜色的效果
Dim ctr_single As Shape 'ctr_single为ActiveX控件(特别注意的是:PowerPoint幻灯片上面的控件皆作为图形的形式访问,要访问这 _
些“图形”式的ActiveX控件的属性必须采用“图形对象.OLEFormat.Object.属性”的形式进行)
For i = 1 To Slide1.Shapes.Count
Set ctr = Slide1.Shapes(i)
ctr.OLEFormat.Object.BackColor = Control_Original_BackColor_Value
ctr.OLEFormat.Object.ForeColor = Control_Original_ForeColor_Value
Next
End Sub
Function Pos_In_A_Array(Type_Name, ControlType_Arr) As Variant '定位给定的类型名字在数组中选找到的位置,如果-1表示不存在该位置
For i = 0 To UBound(ControlType_Arr)
If Type_Name = ControlType_Arr(i) Then
Pos_In_A_Array = i
Exit For
End If
If i > UBound(ControlType_Arr) Then
Pos_In_A_Array = -1
End If
Next
End Function
三、测试实现ActiveX控件背景透明“效果”的展示
按<F5>键放映,可以看到如下效果
图4 单选钮控件背景设置显示提示
图5 点击<确定>后的单选钮控件背景透明展示及复选框控件背景设置显示提示
图6 点击<确定>后的复选框控件背景透明展示及标签控件背景设置显示提示
图7 点击<确定>后的标签控件背景透明展示
图8 按<Esc>结束演示文档放映后,单选钮、复选框、标签控件背景恢复原色
四、技术小结
(一)我们充分运用了获取所在幻灯片的背景色的方式。如下代码截图
图9 获取当前控件所在幻灯片的背景色
(二)同时,立即用该背景色填充ActiveX控件背景的形式实现其背景在“效果”上透明的目的。如下代码截图
图10 用幻灯片背景色填充控件背景色
好了,我们的分析就到这里,谢谢大家的关注(头条号:跟我学office高级办公)、推广和点评哦,更感谢大家持续关注我后期退出的头条原创作品!