[Powerpoint VBA 6] Quels events catchés par DoEvents ?

Quels events catchés par DoEvents ? [Powerpoint VBA 6] - VB/VBA/VBS - Programmation

Marsh Posté le 07-12-2004 à 22:39:58    

Bonjour tout le monde,
 
je bosse en ce moment sur un addin pour PowerPoint (donc je bosse en VBA).
Ce que je veux faire c'est envoyer les titres des slides a un site web pendant un slideshow.
J'ai reussi a faire ca mais j'ai realise que l'appel http prend du temps et du coup, j'aimerais faire cet appel uniquement pour les slides sur lesquels je reste plus d'une seconde. (autrement c'est impossible de naviguer entre les slides correctement)
Donc, j'ai un Sub App_SlideShowNextSlide qui est lance quand je change de slide (logique !).
La, j'ai :

index = ActivePresentation.SlideShowWindow.View.Slide.SlideIndex
Delay 1
If (index = ActivePresentation.SlideShowWindow.View.Slide.SlideIndex) Then
     MsgBox "send the title"
     Call SendTitleFunction
End If


 
et ma fonction Delay est :

Function Delay(nbSeconds As Double) As Boolean
    Const OneSecond As Double = 1# / (1440# * 60#)
    Dim endTime As Date
 
    endTime = Now + OneSecond * nbSeconds
    Do Until Now > endTime
        Sleep 100
        DoEvents
    Loop
End Function


 
Le probleme est que si j'utilise la barre d'espace, les fleches ou 'page up' 'page down', il semble que le DoEvents ne les prends pas en compte et envoie ainsi le titre.
La presence de index dans SlideShowNextSlide est pour ne pas envoyer le slide si jamais j'ai change de slide pendant l'attente (solution pas ideale, je voudrais pouvoir arreter tous les appels a Delay a chaque fois que je change de slide).
 
Donc, mes questions sont  :??: :
-avez-vous une meilleure solution pour remplacer la verification avec index ?
-ai-je raison pour les events effectivement catches par DoEvents ? et si oui, comment puis-je catcher tous les evenements de changement de slide ?
 
Si vous pouvez m'aider ce serait cool. Merci d'avance !
 
 
R.


Message édité par Raspoutim le 09-12-2004 à 01:20:59
Reply

Marsh Posté le 07-12-2004 à 22:39:58   

Reply

Marsh Posté le 09-12-2004 à 01:30:27    

Finalement, j'ai trouve une solution qui me semble assez propre pour faire la requete que pour le slide courant.


Private Sub App_SlideShowNextSlide(ByVal wn As SlideShowWindow)
    Dim index As Integer
 
    index = ActivePresentation.SlideShowWindow.View.Slide.SlideIndex
    Module1.nbDelays = Module1.nbDelays + 1 'nbDelays est une variable booleenne globale
    Delay 2
    If Module1.nbDelays = 0 Then
        Call SendTitle
    End If
End Sub
 
 
Function Delay(nbSeconds As Double) As Boolean
 
Const OneSecond As Double = 1# / (1440# * 60#)
Dim endTime As Date
 
endTime = Now + OneSecond * nbSeconds
Do Until Now > endTime
    Sleep 100
    DoEvents
Loop
Module1.nbDelays = Module1.nbDelays - 1
End Function


 
En revanche, j'ai pas encore trouve comment catcher tous les evenements.
Est-ce que quelqu'un a essaye les fonctions GetInputState et GetQueueStatus ? (cf. par exemple cet article)
J'ai vaguement essaye mais ca n'a pas donne de resultats flambants... Vous avez peut-etre des tips a ce sujet ?
 
Merci !
 
Raspoutim


Message édité par Raspoutim le 09-12-2004 à 01:43:57
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed