• Showing Page History #72679
  • Showing Page History #72676
  • Showing Page History #72702

Show page source of wm3d/HowToUse.ja/powerpoint #81977

= MS Powerpoint に貼る =

まずコントロールツールボックスを探す。デフォルト非表示だった気がするので"表示"から探さないとダメかも。見っけたら "Shockwave Flash Object" を探してクリック。スライド上でクリック & ドラッグで作る。作ったコントロールの右クリックメニューから"プロパティ"をクリック。

出てきた窓で "Movie" に swf ファイルの場所を指定して、WMode を "Direct" か "gpu" に変える。"Direct" と "gpu" で何が違うのかは知らない。

古いバージョン (0.16 以前) はさらに謎の設定を追加しないと表示できないので、新しいバージョン (0.20 以降) を使うといいです。新しいバージョンのほうがバグとかは大分マシになってます。

ちなみに、新しいバージョン (0.20 以降) でもまだまだまだまだ不備があって、相当バグいです。Flash10 の Watermelon の時のほうが大分安定していたように感じるレベルで。powerpoint2003 でのテストでは flash がハングするケースもあります。ページやマウスのフォーカス切り替えがどうも鬼門です。ボチボチ改善していく予定です。できるかわからんけど。

何も表示されなくなっても、クリックしたりドラッグすると表示が復活することがあります。それでも何も起こらなかったら割とどうにもならないです。ファイルを一旦閉じるか、Movie ファイルを一旦変更してまた変更して元に戻せば flash をまた最初から読み込んでくれるので復活します。あぁ、バグがひどいなぁ。バージョン 2.1 以降に付属した VBA をマネして書けば (README_PPT) Movie ファイルを一旦変更してまた戻すのをページ切り替え時に自動でやります。(バグってたらごめん)かなりまともになりますが、それでもまれに flash player 自体がハングするケースがあるみたいです。この VBA のスクリプトを使えば、flash10 の頃程度には安定そう。

[http://cuemol.sourceforge.jp/ja/index.php?FrontPage CueMol]でまた ActiveX control 使えるようになったみたいなんできっとそっちのほうがマトモだし楽ですwwwww

== 一応 VBA のスクリプト ==
 * クラスモジュール, [[LinkAttach(Class.cls)]]
{{{ code vba
Public WithEvents appevent As Application

Private Sub appevent_SlideShowNextSlide(ByVal Wn As SlideShowWindow)
  Dim sld As Slide
  Set sld = Wn.View.Slide
  Dim s As shape
  For Each s In sld.Shapes
    If s.Name Like "ShockwaveFlash*" Then
      Dim swf As ShockwaveFlash
      Set swf = s.OLEFormat.Object
      Dim fn As String
      fn = swf.Movie
      With swf
        .Movie = "dummy"
        .Movie = fn
        .WMode = "Direct"
        .FrameNum = -1
        .Playing = True
      End With
    End If
  Next
End Sub
}}}
この関数はページが切り替わる際に実行され、ページ内の Shockwave Flash Object っぽいものを探して、一旦 Movie プロパティをダミー文字列("dummy")に変更。直後に Movie プロパティを元々のファイルの場所に戻します。ひどいやりかたですが、これで強制的に初期化できるみたいです。

 * 標準モジュール, [[LinkAttach(Module1.bas)]]
{{{ code vba
Dim myobject As New Class1

Sub startEvents()
  Set myobject.appevent = Application
End Sub

Sub stopEvents()
  Set myobject.appevent = Nothing
End Sub
}}}

実際に使うには、とりあえず powerpoint から VBA エディタを起動。そこでまずクラスモジュールを新規に作り(Class1 という名前になるはず)、上のを書く。次に標準モジュールを作って下のを書く。クラス名が違ってたら適当に直してください。んでもって VBA のエディタを終了。powerpoint に戻って、メニューのマクロに行って、startEvents() を実行すればよかったはず。ちなみに VBA は素人がみようみまねでテキトーに書いたものなんで自己責任でお願いします。