這裏我有一個powerpoint 2010演示文稿。在一張幻燈片上有一個嵌入式Windows媒體播放器OCX控制。作爲一個簡單的GUI,我在同一張幻燈片上放置了3個按鈕,分別爲Play,Pause,Stop。perl + VBA:在嵌入Powerpoint幻燈片的按鈕上提高點擊事件
使用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媒體播放器的? – shahkalpesh 2011-05-10 07:48:22
我在Powerpoint的編輯模式下手動添加它,通過開發者菜單/控件功能區/更多控件圖標(點擊錘子和扳手圖標),選擇「Windows Media Player」。 – knb 2011-05-10 09:12:27
由於這是一個activex控件,因此可以查看屬性並將其名稱更改爲「mvpDemo」(例如)。點擊按鈕後,您可以編寫諸如「mvpDemo.controls.pause」或「mvpDemo.controls.play」之類的代碼。這有幫助嗎? – shahkalpesh 2011-05-10 09:37:21