电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

用VBA实现图像文字随意拖


发布日期:2021/8/24
 
与其他一些演示平台如Authorware、Flash等相比,PowerPoint 2003在交互性方面还稍逊风骚,如作诸如图案创意、足球战术、围棋复盘等演示时,经常需要对幻灯片中的图片或文字即时即兴地调整位置以增加演示的生动性,而PPT却无法直接实现,这个时候就需要借助强大的VBA代码了。

让PPT接受宏

PPT内置了VBA编辑器,利用它可以扩展PPT的功能。由于VBA代码特别是用VBA编制的宏病毒代码会对PPT的安全性构成威胁,因此在高安全等级下PPT将拒绝执行VBA。

在确保VBA代码来源合法和运行无害的前提下,需要降低PPT的安全等级以使VBA代码得以执行。选择"工具→宏→安全性"菜单,将安全级别设为"低",同时将"可靠发行商"页下的"信任对于Visual Basic项目的访问"项勾选。

创建PPT

1.在PPT中新建空幻灯片。

2.选择"视图→工具栏→控件工具箱"菜单,打开控件工具箱。

3.点击控件工具栏的"标签"控件,在空幻灯片中拖出标签对象Label1。然后点击控件工具栏的"属性"按钮,打开属性栏,设置Label1的Caption、Font、ForeColor、BackStyle等属性。

4.点击"图像"控件,在幻灯片中添加图像对象Image1。在Image1的属性栏中,设置它的AutoSize、Picture属性,加入图片文件并让图像对象适应图片的大小。TW.wInGWiT.cOM

添加代码

双击Label,或选择"工具→宏→Visual basic编辑器"菜单,打开VBA,选择Label1对象,再选择对应的MouseDown、MouseMove和MouseUp事件,加入以下代码:

Dim X1, X2, X3, X4, X5, X6 As Integer, Y1, Y2, Y3, Y4, Y5, Y6 As Integer, Down As Boolean '设置全局变量,X1、Y1等为Label1等对象的初始坐标值

Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

If Not Down Then

X1=X

Y1=Y

Down=True

End If

End Sub

Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

'如果鼠标已按下,设置Label1新的坐标值

If Down Then

Label1.Left=Label1.Left+X-X1

Label1.Top=Label1.Top+Y-Y1

X1=X

Y1=Y

End If

End Sub

Private Sub Label1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Down=False

SlideShowWindows(1).View.First'刷新屏幕,使用PowerPoint XP/2003时加入此句

End Sub

为Image1加入以下VBA代码:

Private Sub Image1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

If Not Down Then

X4=X

Y4=Y

Down = True

End If

End Sub

Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

'如果鼠标已按下,设置Label1新的坐标值。

If Down Then

Image1.Left=Image1.Left+X-X4

Image1.Top=Image1.Top+Y-Y4

X4=X

Y4=Y

End If

End Sub

Private Sub Image1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Down=False

SlideShowWindows(1).View.First'刷新屏幕,使用PowerPoint XP/2003时加入此句

End Sub

这两段VBA代码并不复杂,稍有VB基础的读者一看便懂,这里就不详加解说了。需要指出的是,以上代码也可在PowerPoint 97/2000中正常执行。

调试执行

Label1和Image1的VBA代码都输入完成并调试无误后,按F5放映幻灯片。怎么样,幻灯片中的图像和文字是不是可以随心所欲地拖动了?

这个示例比较简单,但其原理可作为实现更复杂操控效果的基础。一个熟悉PowerPoint VBA的人,基于此示例设计出类似于空当接龙那样的扑克游戏亦并非难事。不信,你也动手试试?看看PPT到底还有多少功能尚未挖掘出来。

上一篇:Premiere中文字体显示的Bug

下一篇:BCB编程中实现断点续传