2011-05-09 79 views
0

這裏我有一個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 
+0

你是如何添加ocx文件來嵌入Windows媒體播放器的? – shahkalpesh 2011-05-10 07:48:22

+0

我在Powerpoint的編輯模式下手動添加它,通過開發者菜單/控件功能區/更多控件圖標(點擊錘子和扳手圖標),選擇「Windows Media Player」。 – knb 2011-05-10 09:12:27

+0

由於這是一個activex控件,因此可以查看屬性並將其名稱更改爲「mvpDemo」(例如)。點擊按鈕後,您可以編寫諸如「mvpDemo.controls.pause」或「mvpDemo.controls.play」之類的代碼。這有幫助嗎? – shahkalpesh 2011-05-10 09:37:21

回答

1

這工作!

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

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

這是不行的,它是在這裏的完整性。我在評論中提到了這個代碼。

這是我的Perl代碼,在那裏我試圖直接調用btnPlay_Click事件處理程序: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); 

錯誤輸出();

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()