Perl + VBA: повысить событие нажатия на кнопку, встроенную в слайд Powerpoint - PullRequest
0 голосов
/ 09 мая 2011

Вот у меня презентация в powerpoint 2010. На одном слайде находится встроенный проигрыватель Windows Media OCX Control. В качестве простого графического интерфейса я поместил 3 кнопки с надписью Play, Pause, Stop на одном слайде.

Используя модуль Perl Win32 :: OLE , я хочу проверить, воспроизводится ли событие нажатия кнопки «Воспроизведение» во встроенном проигрывателе Windows Media.

Вызывает событие 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

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Это работает!

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

$s->Application->Run('btnPlay_Click', '');
0 голосов
/ 10 мая 2011

Это не работает, это здесь для полноты. Я имел в виду этот код в комментариях.

Это мой 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...