【问题标题】:perl+ VBA: raise click event on a button embedded in a Powerpoint slideperl + VBA:在嵌入Powerpoint幻灯片的按钮上引发点击事件
【发布时间】:2011-05-11 23:37:15
【问题描述】:

这里我有一个 2010 年的 powerpoint 演示文稿。在一张幻灯片上有一个嵌入式 Windows 媒体播放器 OCX 控件。作为一个简单的 GUI,我在同一张幻灯片上放置了 3 个标记为 Play、Pause、Stop 的按钮。

使用 Perl 的 Win32::OLE 模块,我想测试“播放”上的点击事件是否在嵌入式 windows 媒体播放器中播放文件。

用鼠标引发 Click 事件,确实如此。

使用下面的代码,它不起作用。为什么?

note "Slide $i: " . $slide->{Name};
# switch to "full-screen presentation mode"
PowerpointHelpers::launch_slideshow_from_slide($ole->ActivePresentation, $i);
sleep 3;

#does not work
$btnplay->{OLEFormat}->Object()->btnPlay_Click();

sleep 3;
# return to slide edit-mode
# PowerpointHelpers::exit_show($ole);

这是应该运行的 VBA 过程:

Public Sub btnPlay_Click()

    Init
    PlayVideo (Player.URL)

End Sub

如您所见,这只是调用了两个播放 avi 文件的自定义函数。它在交互式使用中确实可以正常工作。但不是通过 VBA 自动化。

与此同时,我已经尝试了该行的多种变体

 $btnplay->{OLEFormat}->Object()->btnPlay_Click();

但没有任何作用。

这里是 $btnplay 对象的转储:

OLE object's properties:
Accelerator .............................
AutoSize ................................ 0
BackColor ............................... 8421504
BackStyle ............................... 1
Caption ................................. Video abspielen
Enabled ................................. 1
Font .................................... [IFont]
ForeColor ............................... 0
Height .................................. 28.375
Left .................................... 18.75
Locked .................................. 0
MouseIcon ............................... <undef>
MousePointer ............................ 0
Name .................................... btnPlay
Picture ................................. <undef>
PicturePosition ......................... 7
TakeFocusOnClick ........................ 1
Top ..................................... 382.875
Visible ................................. 1
Width ................................... 124.75
WordWrap ................................ 0
ZOrderPosition .......................... 9

【问题讨论】:

  • 您是如何将 ocx 文件添加到嵌入 windows 媒体播放器的?
  • 我在 Powerpoint 的编辑模式下手动添加它,通过开发人员菜单/控件功能区/更多控件图标(单击锤子和扳手图标),选择“Windows Media Player”。
  • 由于这是一个activex控件,您可以查看属性并将其名称更改为mvpDemo(例如)。在按钮单击上,您可以编写代码,例如mvpDemo.controls.pausemvpDemo.controls.play。这有帮助吗?
  • 我不想与 WMP 命令栏的“原生”播放/暂停/停止按钮进行交互。它们对于我正在编写的触摸屏应用程序来说太小了。因此,我添加了三个更大的命令按钮。我想触发与这些按钮关联的 Click 事件。想象一个带有单个 CommandButton 控件的空幻灯片和一个简单的事件处理程序子 mybotton_Click() "MsgBox 'Hello'" End Sub。我想从 perl 调用这个事件处理程序。另见stackoverflow.com/questions/4500335/…
  • 点击大按钮,写mvpDemo.controls.play?你发现它有什么问题吗?关于另一个问题,它不是已经回答并接受了吗?

标签: perl testing vba event-handling powerpoint


【解决方案1】:

这行得通!

my $s = $ole->ActivePresentation->SlideShowWindow->View->Slide;

$s->Application->Run('btnPlay_Click', '');

【讨论】:

    【解决方案2】:

    这不起作用,它是为了完整性。我指的是 cmets 中的这段代码。

    这是我的 perl 代码,我尝试直接调用 btnPlay_Click 事件处理程序:

    my $s = $ole->SlideShowWindows(1)->View->Slide;
    PowerpointHelpers::_dump_ole_obj($s, 1);
    
    Win32::OLE->Option(Warn => 3);
    $s->btnPlay_Click();  ### DOES NOT WORK (for me)
    Win32::OLE->Option(Warn => 0);
    

    btnPlay_Click() 的错误输出;

    Win32::OLE(0.1709) error 0x80020003: "Member not found"
        in METHOD/PROPERTYGET "" at 06-mediaplayer--button-clicks-ok.t line 127
    

    幻灯片对象:_dump_ole_obj 的输出

    OLE object's properties:
    Application ............................. [_Application]
    Background .............................. [ShapeRange]
    BackgroundStyle ......................... 0
    ColorScheme ............................. [ColorScheme]
    Comments ................................ [Comments]
    CustomLayout ............................ [CustomLayout]
    CustomerData ............................ [CustomerData]
    Design .................................. [Design]
    DisplayMasterShapes ..................... -1
    FollowMasterBackground .................. 0
    HasNotesPage ............................ -1
    HeadersFooters .......................... [HeadersFooters]
    Hyperlinks .............................. [Hyperlinks]
    Layout .................................. 1
    Master .................................. [_Master]
    Name .................................... Slide7
    NotesPage ............................... [SlideRange]
    Parent .................................. [_Presentation]
    PrintSteps .............................. 1
    Shapes .................................. [Shapes]
    SlideID ................................. 262
    SlideIndex .............................. 24
    SlideNumber ............................. 24
    SlideShowTransition ..................... [SlideShowTransition]
    Tags .................................... [Tags]
    ThemeColorScheme ........................ [ThemeColorScheme]
    TimeLine ................................ [TimeLine]
    sectionIndex ............................ 1
    
    More Funcnames:
    Cut()
    Duplicate()
    Export()
    GetTypeInfo()
    Invoke()
    MoveToSectionStart()
    QueryInterface()
    Release()
    SectionNumber()
    

    【讨论】:

      猜你喜欢
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多