c# - Reproducir y pausar el vídeo desde el formulario de control de formulario
.net winforms (1)
Quiero hacer un control de formulario que pueda iniciar, pausar, detener, cerrar la presentación de la prueba (el tiempo de cuenta atrás se ejecutará cuando se presiona inicio). El problema está en algunas presentaciones, hay videos disponibles (cada diapositiva solo puede contener un máximo de 1 video, y no todas las diapositivas lo contienen).
Estos son algunos fragmentos de código que utilicé para agregar video en el método createPresentation
:
PowerPoint.Slides oSlides = null;
PowerPoint.Slide oSlide = null;
int ctrSoal = 0;
foreach (CQuestion myQuestion in Global.questions)
{
ctrSoal++;
oSlides = oPre.Slides;
oSlide = oSlides.Add(ctrSoal, PowerPoint.PpSlideLayout.ppLayoutTextAndTwoObjects);
oShape2 = oSlide.Shapes[4];
oSlide.Shapes.AddMediaObject(System.IO.Path.Combine(Global.myVideoLocation, myQuestion.video), oShape2.Left, oShape2.Top, oShape2.Width, oShape2.Height);
Hasta ahora ya he probado algunas soluciones desde este link
private void startToolStripMenuItem_Click(object sender, EventArgs e)
{
PowerPoint.Slides oSlides = null;
PowerPoint.Slide oSlide = null;
int ctrSoal = 0;
foreach (CQuestion myQuestion in Global.questions)
{
ctrSoal++;
oSlides = oPre.Slides;
oSlide = oSlides.Add(ctrSoal, PowerPoint.PpSlideLayout.ppLayoutTextAndTwoObjects);
var playVideo = oSlide.TimeLine.MainSequence.FindFirstAnimationFor(oSlide);
}
questionIndex = oPre.SlideShowWindow.View.Slide.SlideIndex - 1;
questionId = myQuiz.questions[questionIndex].id;
if (labelTimer.Text != "Paused")
{
duration = 0;
duration += myQuiz.questions[questionIndex].durationMinute * 60;
duration += myQuiz.questions[questionIndex].durationSecond;
labelKeypadID.Text = "";
for (int i = 0; i < jumlahJawaban; i++)
{
arrChart[i] = 0;
}
}
}
Pero me está dando un error como resultado:
los argumentos no válidos no se pueden convertir de Microsoft.Office.Interop.PowerPoint.Slide a Microsoft.Office.Interop.PowerPoint.Shape
El objetivo que quiero lograr es un control de formulario que pueda reproducir video cuando el usuario presiona el botón de inicio (cuenta regresiva) y no se reproduce automáticamente cuando se ejecuta la presentación.
ACTUALIZAR
Probé este. El programa puede ejecutarse sin error, pero el video aún no se está reproduciendo.
PowerPoint.Shapes objShapes = null;
objShapes = oPre.Slides[1].Shapes;
foreach (Microsoft.Office.Interop.PowerPoint.Shape s in objShapes)
{
if (s.Name.Contains(".wmv"))
{
s.AnimationSettings.PlaySettings.PlayOnEntry = Office.MsoTriState.msoTrue;
}
}
ACTUALIZACIÓN @jonPall
Probé este:
PowerPoint.Slide oSlide = null;
PowerPoint.Shape objShape = null;
PowerPoint.Slides oSlides = null;
PowerPoint.Shapes objShapes = null;
int ctrSoal = 1;
oSlides = oPre.Slides;
oSlide = oSlides.Add(ctrSoal, PowerPoint.PpSlideLayout.ppLayoutTextAndTwoObjects);
objShapes = oPre.Slides[1].Shapes;
var playVideo = oSlide.TimeLine.MainSequence.FindFirstAnimationFor(objShape);
playVideo.Timing.TriggerType = PowerPoint.MsoAnimTriggerType.msoAnimTriggerWithPrevious;
Mi programa puede ejecutarse sin errores, pero cuando presiono iniciar (para reproducir el video y ejecutar el temporizador de cuenta regresiva), aparece el error
Secuencia (miembro desconocido): Valor ilegal. El objeto no existe.
ACTUALIZACIÓN @Andy
PowerPoint.Slide oSlide = null;
PowerPoint.Slides oSlides = null;
PowerPoint.Shapes objShapes = null;
int ctrSoal = 1;
oSlides = oPre.Slides;
oSlide = oSlides.Add(ctrSoal, PowerPoint.PpSlideLayout.ppLayoutTextAndTwoObjects);
int indexSlide = oPre.SlideShowWindow.View.Slide.SlideIndex;
objShapes = oPre.Slides[indexSlide].Shapes;
foreach (Microsoft.Office.Interop.PowerPoint.Shape objShape in objShapes) {
string extension = Path.GetExtension(objShape.Name);
if (extension == ".wmv") {
//MessageBox.Show("Video Available");
var playVideo = oSlide.TimeLine.MainSequence.FindFirstAnimationFor(objShape);
playVideo.Timing.TriggerType = PowerPoint.MsoAnimTriggerType.msoAnimTriggerWithPrevious;
}
}
con el script anterior puedo detectar si en la diapositiva activa contiene video o no
pero ~ var ~ playVideo sigue siendo nulo en la diapositiva contiene video
donde me estoy perdiendo
Prueba esto:
playVideo.Timing.TriggerType = PowerPoint.MsoAnimTriggerType.msoAnimTriggerWithPrevious;