||
本例中的多数代码必须在放映幻灯片时运行,因此如果是2007或者更高版本,需要保存为“启用宏的Powerpoint文稿(*.pptm)”。
1、输入如下代码。
'引入定时器的API函数,并定义两个全局变量。 Private Declare Function SetTimer Lib "user32.dll" ( _ Private Declare Function KillTimer Lib "user32.dll" ( _ Public lTimerID AsLong , i As Integer |
'绘制一个小球并命名(本段运行一次以后可以删掉),命名的原因是以后可以方便地通过名字操作所绘制的对象。 Public Sub drawOval ( ) Dim shp As Shape ActivePresentation.Slides(1).Shapes.AddShape( _ End Sub |
'如果i=0,则启动定时器(本例StartTimer 10表示每10毫秒触发一次定时器事件,即执行一次后面的OnTime函数,i=100则重新初始化程序。 Sub moveOval ( ) Dim j As Integer If i =100 Then ActivePresentation.Slides(1).Shapes("o1").Left= cm2p(1) ActivePresentation.Slides(1).Shapes("o1").Top= cm2p(1) i =0 For j =0 To 99 ActivePresentation.Slides(1).Shapes("line"& j).Delete Next Else If i =0 Then StartTimer 10 End If End Sub |
'启动计时器 Sub StartTimer(lDuration AsLong) If lTimerID =0 Then lTimerID =SetTimer(0&,0&, lDuration,AddressOfOnTime) Else Call StopTimer lTimerID =SetTimer(0&,0&, lDuration,AddressOfOnTime) End If End Sub |
'停止定时器。 Sub StopTimer() KillTimer0&, lTimerID End Sub |
'移动小球并画出一条轨迹,当i=100时终止程序。 Sub OnTime( ) Dim x1 AsSingle, x2 AsSingle, y1 AsSingle, y2 As Single x1 =ActivePresentation.Slides(1).Shapes("o1").Left+cm2p(0.5) y1 =ActivePresentation.Slides(1).Shapes("o1").Top+cm2p(0.5) ActivePresentation.Slides(1).Shapes("o1").Top= cm2p(1+ i * i /1000) ActivePresentation.Slides(1).Shapes("o1").Left= cm2p(1+ i /10) x2 =ActivePresentation.Slides(1).Shapes("o1").Left+cm2p(0.5) y2 =ActivePresentation.Slides(1).Shapes("o1").Top+cm2p(0.5) ActivePresentation.Slides(1).Shapes.AddLine(x1, y1, x2, y2).Name="line"& i i = i +1 If i =100 Then StopTimer EndSub |
'实现厘米转化为“磅”。 Private Function cm2p(cm As Single) As Single |
2、先在设计视图下执行前面的第一段程序,再绘制一个矩形作为按钮。
3、选中刚才绘制的矩形,在“插入”选项卡里单击“动作”按钮,弹出对话框。单击“运行宏”,然后在下拉框里选择moveOval,即可放映运行。
本文是在运行时逐段画出轨迹的,也可以在画出小球时同时画出抛物线轨迹(用AddPolyLine方法),并画一与背景颜色相同的矩形盖住轨迹,然后在运行时同时移动小球和矩形。
本例除了大部分代码需要在ppt放映时运行外,还有一点要注意的是,当放映运行一次以后返回到设计界面,小球仍然停留在放映运行以后的位置。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-13 19:27
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社