Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188243
  • 博文数量: 106
  • 博客积分: 3810
  • 博客等级: 中校
  • 技术积分: 1007
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-18 13:35
文章分类

全部博文(106)

文章存档

2014年(17)

2011年(5)

2010年(75)

2009年(9)

我的朋友

分类:

2010-12-07 08:24:39

构建一个事件句柄

你能够在VB.net中使用下面方法之一构建一个事件句柄。采用哪种方法取决于你打算怎样用一个事件去关联事件句柄。
方法1
典型的做法是使用WithEvents关键字建立一个事件句柄。
方法2
VB.net提供了另一种方式处理事件,你可以使用AddHandler和RemoveHandler语句动态地开始和停止指定事件的句柄。

注意: 如果你使用WithEvents关键字构建了事件句柄,那么你可能会接收到一个System.Reflection.TargetInvocationException异常,因此

,最好采用AddHandler来构建事件句柄。

建立VB.net自动客户端处理PPT事件

下面将分步告诉你怎样使用AddHandler语句处理PPT事件:

按下列步骤建立一个VB工程:
(1)开始Microsoft Visual Studio .NET .
(2)在文件菜单中,单击新建然后单击工程。
(3)在工程类型列表中,单击VB工程,在模版列表中,单击Windows应用程序。
(4)把工程名命名为PowerPointEvents然后单击“确定”。

增加PPT对象库和Graph对象库的引用:
(1)在工程菜单中,单击增加引用。
(2)在COM选项中,单击Microsoft PowerPoint 11.0 Object Library 然后选择。.
(3)在COM选项中,单击Microsoft Graph 11.0 Object Library 然后选择。
(4)然后单击“确定”。
(5)双击窗体,打开代码窗口。
(6)在Form1.vb的顶部,增加下面的代码:

Imports PowerPoint = Microsoft.Office.Interop.PowerPoint
 Imports Office = Microsoft.Office.Core
 Imports Graph = Microsoft.Office.Interop.Graph

(7)在视图菜单中,单击Designer(设计).
(8)在视图菜单中,单击“工具栏”,然后增加一个按钮给Form1.
(9)双击Button1.,打开 Button1_Click事件。
(10)在Button1_Click的前面插入下面代码:
 

Dim oApp As PowerPoint.Application
 Dim oPres As PowerPoint.Presentation


(11)把下列代码增加给Button1_Click事件。

Const sTemplate = "C:\Program Files\Microsoft Office\Templates\Presentation Designs\Orbit.pot"
        ' 如果前面 模版无效,请改变上面的内容。
        Const sVideo = "C:\WINDOWS\system32\oobe\images\intro.wmv"

        Dim oPresentations As PowerPoint.Presentations
        Dim oSlides As PowerPoint.Slides
        Dim oSlide As PowerPoint.Slide
        Dim oShapes As PowerPoint.Shapes
        Dim oShape As PowerPoint.Shape
        Dim oMovie As PowerPoint.Shape
        Dim oAnimationSettings As PowerPoint.AnimationSettings
        Dim oPlaySettings As PowerPoint.PlaySettings
        Dim oTextFrame As PowerPoint.TextFrame
        Dim oTextRange As PowerPoint.TextRange
        Dim oFont As PowerPoint.Font
        Dim oOLEFormat As PowerPoint.OLEFormat
        Dim oShadow As PowerPoint.ShadowFormat
        Dim oForeColor As PowerPoint.ColorFormat
        Dim oRange As PowerPoint.SlideRange
        Dim oSlideShowTransition As PowerPoint.SlideShowTransition

        '启动PowerPoint然后把其窗口最小化。
        oApp = New PowerPoint.Application

        '增加事件句柄
        AddHandler oApp.SlideShowBegin, AddressOf oApp_SlideShowBegin
        AddHandler oApp.SlideShowNextSlide, AddressOf oApp_SlideShowNextSlide
        AddHandler oApp.PresentationClose, AddressOf oApp_PresentationClose

        oApp.Visible = True
        oApp.WindowState = PowerPoint.PpWindowState.ppWindowMinimized

        '用指定的模版建立一个新演示文稿。
        oPresentations = oApp.Presentations
        oPres = oPresentations.Open(sTemplate, , , True)

        '建立幻灯片1
        '增加文本到该幻灯片,设置字体然后插入一个影片。
        oSlides = oPres.Slides
        oSlide = oSlides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitleOnly)
        oShapes = oSlide.Shapes
        oShape = oShapes.Item(1)
        oTextFrame = oShape.TextFrame
        oTextRange = oTextFrame.TextRange
        oTextRange.Text = "一个示例演示文稿"
        oFont = oTextRange.Font
        oFont.Name = "黑体"
        oFont.Size = 48

        oMovie = oShapes.AddMediaObject(sVideo, 150, 150, 500, 350)
        oAnimationSettings = oMovie.AnimationSettings
        oPlaySettings = oAnimationSettings.PlaySettings
        oPlaySettings.PlayOnEntry = True
        oPlaySettings.HideWhileNotPlaying = True

        '释放对象
        NAR(oPlaySettings)
        NAR(oAnimationSettings)
        NAR(oMovie)
        NAR(oFont)
        NAR(oTextRange)
        NAR(oTextFrame)
        NAR(oShape)
        NAR(oShapes)
        NAR(oSlide)
        NAR(oSlides)

        '建立幻灯片2.
        '增加文本到该幻灯片标题并格式化文本,增加一个 chart并把其类型设置为三维柱状样式
        oSlides = oPres.Slides
        oSlide = oSlides.Add(2, PowerPoint.PpSlideLayout.ppLayoutTitleOnly)
        oShapes = oSlide.Shapes
        oShape = oShapes.Item(1)
        oTextFrame = oShape.TextFrame
        oTextRange = oTextFrame.TextRange
        oTextRange.Text = "My chart"
        oFont = oTextRange.Font
        oFont.Name = "Comic Sans MS"
        oFont.Size = 48

        Dim oChart As Graph.Chart
        oShape = oShapes.AddOLEObject(150, 150, 480, 320, "MSGraph.Chart.8")
        oOLEFormat = oShape.OLEFormat
        oChart = oOLEFormat.Object
        oChart.ChartType = Graph.XlChartType.xl3DColumnClustered

        '释放对象
        NAR(oChart)
        NAR(oOLEFormat)
        NAR(oFont)
        NAR(oTextRange)
        NAR(oTextFrame)
        NAR(oShape)
        NAR(oShapes)
        NAR(oSlide)
        NAR(oSlides)


        '建立幻灯片3
        '增加一个艺术字并应用阴影效果
        oSlides = oPres.Slides
        oSlide = oSlides.Add(3, PowerPoint.PpSlideLayout.ppLayoutBlank)
        oSlide.FollowMasterBackground = False
        oShapes = oSlide.Shapes
        oShape = oShapes.AddTextEffect(Office.MsoPresetTextEffect.msoTextEffect27, _
            "The End", "Impact", 96, False, False, 230, 200)

        oShadow = oShape.Shadow
        oForeColor = oShadow.ForeColor
        oForeColor.SchemeColor = PowerPoint.PpColorSchemeIndex.ppForeground
        oShadow.Visible = True
        oShadow.OffsetX = 3
        oShadow.OffsetY = 3

        '释放对象.
        NAR(oShadow)
        NAR(oForeColor)
        NAR(oShape)
        NAR(oShapes)
        NAR(oSlide)
        NAR(oSlides)


        '修改演示文稿中所有幻灯片的放映切换设置。
        Dim SlideIdx(3) As Integer
        SlideIdx(0) = 1
        SlideIdx(1) = 2
        SlideIdx(2) = 3

        oSlides = oPres.Slides
        oRange = oSlides.Range(SlideIdx)
        oSlideShowTransition = oRange.SlideShowTransition
        oSlideShowTransition.AdvanceOnTime = False
        oSlideShowTransition.EntryEffect = PowerPoint.PpEntryEffect.ppEffectBoxOut


        '放映幻灯片
        RunSlideShow()

        '释放对象
        NAR(oSlideShowTransition)
        NAR(oRange)
        NAR(oSlides)

        '不保存改变关闭演示文稿
        oPres.Saved = True
        oPres.Close()

        '释放对象
        NAR(oPres)
        NAR(oPresentations)

        '移去所有事件句柄
        RemoveHandler oApp.SlideShowBegin, AddressOf oApp_SlideShowBegin
        RemoveHandler oApp.SlideShowNextSlide, AddressOf oApp_SlideShowNextSlide
        RemoveHandler oApp.PresentationClose, AddressOf oApp_PresentationClose

        '退出PPT
        oApp.Quit()
        NAR(oApp)

        GC.Collect()

12、下面这两过程用于Button1_Click事件中,用来启动幻灯片放映

Private Sub RunSlideShow()
            Dim oSettings As PowerPoint.SlideShowSettings
     Dim oSlideShowWindows As PowerPoint.SlideShowWindows

     oSettings = oPres.SlideShowSettings
     oSettings.StartingSlide = 1
            oSettings.EndingSlide = 3

            oSettings.Run()

            oSlideShowWindows = oApp.SlideShowWindows

            On Error Resume Next
            Do While oSlideShowWindows.Count >= 1
         System.Windows.Forms.Application.DoEvents()
            Loop

     NAR(oSlideShowWindows)
            NAR(oSettings)
 End Sub

     'NAR用于释放对象
    Private Sub NAR(ByVal o As Object)
            Try
         System.Runtime.InteropServices.Marshal.ReleaseComObject(o)
            Catch
            Finally
                o = Nothing
            End Try
     End Sub

13、增加事件句柄:

     Private Sub oApp_SlideShowBegin(ByVal Wn As Microsoft.Office.Interop.PowerPoint.SlideShowWindow)
            '改变放映窗口的位置和大小
            Dim oView As PowerPoint.SlideShowView

            With Wn
                .Height = 325
                .Width = 400
                .Left = 100
                .Activate()
            End With
            oView = Wn.View
            oView.Next()

            NAR(oView)
            NAR(Wn)
     End Sub

     Private Sub oApp_SlideShowNextSlide(ByVal Wn As Microsoft.Office.Interop.PowerPoint.SlideShowWindow)
            '改变放映窗口指针的颜色和类型
            Dim Showpos As Integer
            Dim oView As PowerPoint.SlideShowView
            Dim oColorFormat As PowerPoint.ColorFormat

            oView = Wn.View
            Showpos = oView.CurrentShowPosition + 1

            If Showpos = 3 Then
                oColorFormat = oView.PointerColor
                oColorFormat.RGB = RGB(255, 0, 0)
                oView.PointerType = PowerPoint.PpSlideShowPointerType.ppSlideShowPointerPen
            Else
                oColorFormat = oView.PointerColor
                oColorFormat.RGB = RGB(0, 0, 0)
                oView.PointerType = PowerPoint.PpSlideShowPointerType.ppSlideShowPointerArrow
            End If

            NAR(oColorFormat)
            NAR(oView)
            NAR(Wn)
     End Sub

     Private Sub oApp_PresentationClose(ByVal Pres As Microsoft.Office.Interop.PowerPoint.Presentation)
            '关闭演示文稿前,把它保存为网页格式。
            Pres.SaveAs("C:\TestEvents.htm", PowerPoint.PpSaveAsFileType.ppSaveAsHTML)
            NAR(Pres)
     End Sub


阅读(1152) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-07 15:46:53

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com